繁体   English   中英

使用特殊字符? sed

[英]Using special character ? in sed

我正在尝试使用sed替换以下格式的电话号码:

+1(123)456-7890

其中+和以下1是可选的。 其他数字是任意的,但格式必须相同(即+1(123)456-7890、1(321)456-0987,(222)555-9900应该匹配)

我在这个问题中读到,我要么需要使用扩展的正则表达式选项,要么转义所有出现的{ }? 如果我想将它们用作特殊字符。 由于--regexp-extended在我的sed版本中不可用,因此我选择转义特殊字符。

这是我到目前为止尝试过的:

sed 's/+\\?1\\?([0-9]\\{3\\})[0-9]\\{3\\}-[0-9]\\{4\\}/test/g'

与我指定的格式编号不匹配。

我能得到的最接近的是:

sed 's/([0-9]\\{3\\})[0-9]\\{3\\}-[0-9]\\{4\\}/test/g'

这可以匹配(222)555-9900等,但显然不匹配开头为+1+1数字。

我有点迷茫,因为我尝试了很多不同的方法来匹配上一个表达式的0或1,但是它们都不起作用。

以防万一它可能会有所帮助:我使用的是Macbook上预先安装的sed。

您可以申请*\\? 分组。 例如: \\(abc\\)\\? 表示“文本'abc'可以存在或不存在”。

对于您的情况,解决方案是:

sed 's/\(+\?1\)\?([0-9]\{3\})[0-9]\{3\}-[0-9]\{4\}/test/'

要么

sed -E 's/(\+?1)?\([0-9]{3}\)[0-9]{3}-[0-9]{4}/test/'

顺便说一句,在Macbook中,您已安装了BSD。 在Linux中,通常使用GNU sed(它也支持'-E'标志作为'-r'的别名)。 因此最好始终使用“ -E”来实现可移植性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM