仅当连字符超过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
但它替换所有带连字符的数字的连字符。
请帮忙吗?
答案 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'