sed:替换与包含正斜杠的模式匹配的行吗?

时间:2018-12-10 11:17:14

标签: regex bash sed replace pattern-matching

我知道这个问题已经被问过了,我似乎无法为我的sed命令获得正确的语法。

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

我要替换的文件的片段如下:

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

2 个答案:

答案 0 :(得分:0)

您需要指定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

答案 1 :(得分:0)

在您的命令中,您缺少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