首页 > 解决方案 > sed 正则表达式替换手机号码

问题描述

我有一个命令:

echo '1-2 1-2? Is this mic on? Hello asd48300300300 48300300-asd 48300 world! It is 48300300300 asd ' | sed -E 's/48(.*)[:space:]/48500500500/g'

我想要的只是替换 48300300300 所以它应该看起来像:

1-2 1-2? Is this mic on? Hello asd48300300300 48300300-asd 48300 world! It is 48500500500 asd

最好的选择是这样的 \s48[0-9]{9}\s

标签: regexsed

解决方案


您可以匹配一个以 9 位开头48然后是 9 位数字的整数:

sed -E 's/\<48[0-9]{9}\>/48500500500/'

请参阅在线sed演示

输出:

1-2 1-2? Is this mic on? Hello asd48300300300 48300300-asd 48300 world! It is 48500500500 asd 

细节

  • \<- 引导词边界
  • 48- 文字子串
  • [0-9]{9}- 九位数
  • \>- 结束词边界

边界这个\b词也可能起作用:sed -E 's/\b48[0-9]{9}\b/48500500500/'.

如果您只能匹配空格之间的数字,请使用

sed -E 's/([[:space:]]|^)48[0-9]{9}([[:space:]]|$)/\148500500500\2/'

查看另一个在线sed演示。请注意,POSIX 字符类[:space:]必须出现在括号表达式内。

根据评论更新

要添加数字的最后 3 位数字而不是硬编码500您可以使用的最后一位数字

sed -E 's/\<48[0-9]{6}([0-9]{3})\>/48500500\1/'

查看另一个演示


推荐阅读