如何使用 sed 命令查找和替换包含特殊字符的字符串

如何使用 sed 命令查找和替换包含特殊字符的字符串

我有一个包含以下内容的文件:deployment.yml

spec:
  containers:
  - name: atl-lead
    image: "registry.it.zone/api/dev/atl-x:1.2.0-SNAPSHOT-110"
    imagePullPolicy: Always

我想使用sed命令将此文件更改为:

spec:
  containers:
  - name: atl-lead
    image: "registry.it.zone/api/dev/atl-x:1.8.0"
    imagePullPolicy: Always

我使用下面的命令

sed -i "/registry.vn.eit.zone/open-api/dev/atl-x:.*/registry.vn.eit.zone/open-api/dev/atl-x:1.8.0/g" deployment-canary.yml

但它显示了这个错误:

sed: -e expression #1, char 24: unknown command: `o'

请帮助我。谢谢。

答案1

您始终可以通过在特殊符号前加上反斜杠来转义它们,以避免它们被视为正则表达式\

在这种情况下没有必要,您可以简单地将sed使用的分隔符从更改/为例如%!或任何其他单字节字符。

sed 's/search/replace/'您可以直接书写,而不必书写sed 's%search%replace%'

例子:

╰─$ echo 'image: "registry.it.zone/api/dev/atl-x:1.2.0-SNAPSHOT-110"' | sed 's%image: "registry.it.zone/api/dev/atl-x:1.2.0-SNAPSHOT-110"%image: "registry.it.zone/api/dev/atl-x:1.8.0"%'

image: "registry.it.zone/api/dev/atl-x:1.8.0"

提示: 查看Regex101如果您在创建有效的正则表达式时遇到问题。它会在您输入时显示每个匹配项和错误。

相关内容