使用SED将字符串附加到现有文本行?

时间:2010-06-26 07:19:30

标签: regex linux text replace sed

我正在尝试使用linux sed命令将路径元素附加到.htaccess文件中的RewriteBase。

我试过这个论点:

#current RewriteBase is "RewriteBase /mypath"
sed -ie 's/RewriteBase\(.*\)/RewriteBase \1\/add/g' .htaccess

有了这个结果:

addriteBase /mypath

所以sed用最后一个字符串覆盖替换字符串的开头。

为什么?

另一个问题是当RewriteBase只是“/”时,如何防止有2个斜杠。

RewriteBase /

将成为

RewriteBase //add

但应该是

RewriteBase /add

有什么方法可以阻止这种情况吗?如果不是,我可以运行第二个sed命令,用一个替换所有双斜杠。但也许有更优雅的方式来做到这一点。

我将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果您要做的只是在行中附加一些文字,则不需要反向引用。试试这个:

sed -i.bak 's/^M//g;s|RewriteBase.*|&/add|' .htaccess

特殊&字符表示模式空间中匹配的所有内容。

注意:

s/^M//g部分是等同于dos2unix的sed,^M是通过键入<ctrl+v><ctrl+m>创建的。

答案 1 :(得分:1)

您所看到的内容包括结果中的\r,使其看起来,就好像文字停留在开头一样。在通过sed。

之前,将文件推送到dos2unix

至于第二部分,您需要捕获组外的可选斜杠,然后输入/add