我知道这个问题已经被问过了,我似乎无法为我的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
答案 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