从数字中删除尾随点,并使用sed删除数字周围的圆括号

时间:2013-10-08 07:35:25

标签: unix sed

我有以下数据

X.|X.X|abcdefesd|(XXXX)|XXXXXXXXX

我正在使用sed将其格式化为

X|X.X|abcdefesd|XXXX|XXXXXXXXX

X =数字

我使用命令sed "s/\([0-9]+\)/\1/g"作为第1列(这里的数字可以是1位数到3位数)

第4列的

sed 's/[^(]*(\([^)]*\)).*/\1/g'(数字将始终为4位数)

我目前是unix的新手

3 个答案:

答案 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