仅当连字符后面的数字超过 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
但它会替换所有连字符数字的连字符。
请问有什么帮助吗?
最佳答案
您必须指定“超过两个”:
$ 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,\}
是“三个或更多”。
如果您的 sed 支持(对于 GNU sed:-r
选项),您可以使用扩展正则表达式,这会简化命令
sed -r 's/([0-9]{3,})-/\1/g'
关于linux - 仅当连字符后面的数字超过 2 位时才删除数字之间的连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34893418/