linux - 仅当连字符后面的数字超过 2 位时才删除数字之间的连字符

标签 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

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

请问有什么帮助吗?

最佳答案

您必须指定“超过两个”:

$ 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/

相关文章:

c - 替代 gethostbyname 我可以在哪里选择 DNS 服务器?

c - 在linux中使用execv使用 './'命令

Linux - 使用文件提供命令输入并在命令运行时删除该文件

unix - 是否可以为 Unix dc 计算器设置默认精度?有它的配置文件吗?

java - 如何在直接 .class 文件或保存在多个子目录中的各种 jar 文件内的 .class 文件中查找特定字符串文本

awk - 比较两个文本文件,同时排除前导空格和尾随逗号

用于获取两个文件中的命令值并写入新文件的 bash 脚本

linux - 无法将文件添加到 git 存储库,但可以更改/提交

linux - Unix : how does a "./process | sort" work?

linux - 使用 .env 文件运行 shell 脚本