You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Bash脚本仅精准匹配替换特定开头的IP地址?

问题原因

你写的sed命令存在两个核心错误:

  • 正则中的.默认是通配符,可以匹配任意单个字符,并不会只匹配字面量的小数点,导致匹配范围完全失控
  • 没有限定匹配的边界,嵌套在其他字段中的符合x+任意字符+111+任意字符规则的内容也会被误替换

解决方案

如果你要精准匹配字段开头(前面为空格/行首)的字面量x.111.,替换为Z.,使用如下命令即可:

sed -i -E 's/(^|[[:space:]])x\.111\./\1Z./g' test.txt

命令说明

  • -E 参数开启扩展正则支持,不用额外转义括号
  • (^|[[:space:]]) 限定匹配内容的前缀必须是行首或者空白符(空格、制表符等),避免匹配到Y8.x.111这类嵌套在其他字段中的内容
  • x\.111\. 里的.都加了转义符\,只会匹配字面量的小数点,不会作为通配符使用
  • \1 是反向引用,把前面匹配到的行首/空白符补回来,避免替换后丢失字段分隔

如果你的匹配规则是其他边界,只需要调整(^|[[:space:]])部分的前缀规则即可。

内容的提问来源于stack exchange,提问作者CXR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:15:03