仅当连字符超过2位数时,才删除数字之间的连字符

时间:2016-01-20 06:57:58

标签: linux unix awk sed

仅当连字符超过2位数时才删除连字符?

输入:

101|9881|Customer contact on 12-01-2015|AXD

102|9882|Declined sales. 122-333-1234 contact|XYZ

输出:

101|9881|Customer contact on 12-01-2015|AXD

102|9882|Declined sales. 1223331234 contact|XYZ 

我用过这个......

sed 's/([0-9])-([0-9])/\1\2/g' inputfile

但它替换所有带连字符的数字的连字符。

请帮忙吗?

1 个答案:

答案 0 :(得分:2)

您必须指定"超过两个":

$ sed 's/\([0-9]\{3,\}\)-/\1/g' <<< '101|9881|Customer contact on 12-01-2015|AXD
> 102|9882|Declined sales. 122-333-1234 contact|XYZ'
101|9881|Customer contact on 12-01-2015|AXD
102|9882|Declined sales. 1223331234 contact|XYZ

在基本的正则表达式(没有选项的GNU sed),()匹配文字括号时,你必须为捕获组转义它们。量词的大括号相同:\{3,\}是&#34;三个或更多&#34;。

如果你的sed支持它(对于GNU sed:-r选项),你可以使用扩展的正则表达式,这简化了命令

sed -r 's/([0-9]{3,})-/\1/g'