我有以下数据
X.|X.X|abcdefesd|(XXXX)|XXXXXXXXX
我正在使用 sed 将其格式化为
X|X.X|abcdefesd|XXXX|XXXXXXXXX
X = 数字
我正在使用 sed "s/\([0-9]+\)/\1/g"
第一列的命令(这里的数字可以是 1 位到 3 位)
对于第sed 's/[^(]*(\([^)]*\)).*/\1/g'
4 列(数字始终为 4 位)
我目前是 unix 新手
这应该有效:
sed -e 's/\([0-9]\+\)\.\([^0-9]\)/\1\2/g' -e 's/(\([0-9]\+\))/\1/g'
-e
用于链接多个 sed 指令。第一个捕获数字序列,后跟一个点,然后是一个非数字,并在没有点的情况下替换它。第二个只是用没有括号的相同序列替换括号内的任何数字序列。
echo "2.|3.5|abcdefesd|(3455)|2412412414" | sed -e 's/\([0-9]\+\)\.\([^0-9]\)/\1\2/g' -e 's/(\([0-9]\+\))/\1/g'
2|3.5|abcdefesd|3455|2412412414
使用awk
. 尝试:
awk -F'|' -vOFS='|' '{$1=sprintf("%d",$1);gsub("[^0-9]","",$4)}1' inputfile
例子:
$ awk -F'|' -vOFS='|' '{$1=sprintf("%d",$1);gsub("[^0-9]","",$4)}1' <<< "2.|3.5|abcdefesd|(3455)|2412412414"
2|3.5|abcdefesd|3455|2412412414
为什么不直接删除括号?
awk '{gsub(/[()]/,x)}1' <<< "2.|3.5|abcdefesd|(3455)|2412412414"
2.|3.5|abcdefesd|3455|2412412414