我有以下数据
X.|X.X|abcdefesd|(XXXX)|XXXXXXXXX
我正在使用sed将其格式化为
X|X.X|abcdefesd|XXXX|XXXXXXXXX
X =数字
我使用命令sed "s/\([0-9]+\)/\1/g"
作为第1列(这里的数字可以是1位数到3位数)
和sed 's/[^(]*(\([^)]*\)).*/\1/g'
(数字将始终为4位数)
我目前是unix的新手
答案 0 :(得分:1)
这应该有效:
sed -e 's/\([0-9]\+\)\.\([^0-9]\)/\1\2/g' -e 's/(\([0-9]\+\))/\1/g'
-e
用于链接多个sed sommands。第一个捕获和数字序列后跟一个点,然后是一个非数字,并替换它没有点。第二个只是用括号替换括号内的任何数字序列。
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
答案 1 :(得分:1)
使用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
答案 2 :(得分:0)
为什么不删除括号?
awk '{gsub(/[()]/,x)}1' <<< "2.|3.5|abcdefesd|(3455)|2412412414"
2.|3.5|abcdefesd|3455|2412412414