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



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

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

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

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

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

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

查看在线演示

最新更新