我正在尝试使用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命令,用一个替换所有双斜杠。但也许有更优雅的方式来做到这一点。
我将不胜感激。
答案 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
。