【问题标题】:sed: Replace lines matching a pattern that contains forward slashes?sed:替换与包含正斜杠的模式匹配的行?
【发布时间】:2019-05-11 06:52:16
【问题描述】:

我知道以前有人问过这个问题,但我似乎无法为我的 sed 命令获得正确的语法。

我需要将OPP/com.user.opp.orchest.po.services.stub-npo/npo-stub 替换为OPP/com.user.opp.orchest.po.services.stub-ica/npo-ica

我要替换的文件的 sn-p 如下:

config.xml

<compareType>PLAIN</compareType>
<pattern>
OPP/com.user.opp.orchest.po.services.stub-npo/npo-stub
</pattern>
<branches>
<com.sonyuser.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch>
<compareType>ANT</compareType>
<pattern>master</pattern>
</com.sonyuser.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch>
</branches>
${REPO_MIRROR}/OPP/com.user.opp.orchest.po.services.stub-npo/npo-stub

我已经尝试了以下,

sed -i '/^\/OPP/\com.user.opp.orchest.po.services.stub-npo/\npo-stub\/OPP/\com.user.opp.orchest.po.services.stub-ica/\npo-ica/g' config.xml

【问题讨论】:

标签: regex bash sed replace pattern-matching


【解决方案1】:

在您的命令中,您缺少用于替换的 s 并且错误地转义了 \ 字符。此外,当您回复我的评论时,您想从文件中的任何位置替换它,您不必在正则表达式中使用 ^ 字符。正则表达式中的点. 表示任何字符,因此它们也需要转义。

你可以使用这个命令,

sed -i 's/OPP\/com\.user\.opp\.orchest\.po\.services\.stub-npo\/npo-stub/OPP\/com.user.opp.orchest.po.services.stub-ica\/npo-ica/g' yourfilename

【讨论】:

  • 效果很好,感谢您和@Wiktor Stribiżew 的帮助和知识
【解决方案2】:

您需要指定s 命令并将/\ 替换为\/。这里还有一些其他的拼写错误(开头的\/ 是不必要的)。此外,转义点以匹配文字点。一个好主意是在此处使用其他分隔符而不是 /,例如,,因为您在正则表达式和替换部分中有 / 字符。

你可以使用

sed -i 's,^OPP/com\.user\.opp\.orchest\.po\.services\.stub-npo/npo-stub,OPP/com.user.opp.orchest.po.services.stub-ica/npo-ica,' file

online demo

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多