regex - 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
解决方案
您可以匹配一个以 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/'
查看另一个演示。
推荐阅读
- python - Python SQLAlchemy:TypeError:connect()缺少1个必需的位置参数:'user'
- python - Pyspark:使用 toPandas() 的性能
- reactjs - 带有钩子的 React-pixi 渲染 10000 次相同的图像
- list - 如何拆分列表以添加到具有不同数据类型的 Scala 中的地图
- python - 如何在 pymongo 中使用 $add、$subtract?
- python - 如何让 dev_appserver.py 使用单独版本的 python?
- php - 无法使用用户名特殊字符更新项目 ID
- c - 如何理解 SIGSTOP 交付?
- python - AttributeError:“NoneType”对象没有属性“get_text”阻止我继续前进
- vim - Configuring Vim/Neovim ALE plugin to support :ALEGoToDefinition in JavaScript files