仅在文件中的数字之间删除多个空格

时间:2016-01-19 19:16:27

标签: linux unix awk sed

输入文件:

101|989881|Customer contact 123 456  7777|AXD

102|989882|Declined sales. Details 122 -333 - 1234 contact|XYZ

输出文件:

101|9881|Customer contact 1234567777|AXD

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

尝试:

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

此命令仅在数字之间存在一个空格且不满足其他条件时才会删除。

任何人都可以帮忙解决这个问题。

1 个答案:

答案 0 :(得分:3)

你快到了!以下是您想要的...它删除多个连续的空格,并且一直持续到您没有更多匹配(t命令的目的)...这将处理匹配'0 - 0'的情况 - 没有在t语句中,第二个匹配' - 0'将不会被处理,因为' - '在上一个匹配中。

sed ':x; s/\([0-9-]\) \+\([0-9-]\)/\1\2/g; tx' inputfile

有一个潜在的弱点......那就是当你遇到' - - '时你可能不想删除空格。这需要更多的工作:

sed ':x; s/\([0-9]\) \+\([0-9-]\)/\1\2/g; tx; :y; s/\([0-9-]\) \+\([0-9]\)/\1\2/g; ty;' inputfile