[英]Using SED to append a string to an existing line of text?
我正在尝试使用linux sed命令将路径元素附加到.htaccess文件中的RewriteBase。
我用以下参数尝试过:
#current RewriteBase is "RewriteBase /mypath"
sed -ie 's/RewriteBase\(.*\)/RewriteBase \1\/add/g' .htaccess
结果如下:
addriteBase /mypath
因此sed用最后一个字符串覆盖替换字符串的开头。
这是为什么?
另一个问题是当RewriteBase只是“ /”时如何防止出现两个斜杠。
RewriteBase /
会变成
RewriteBase //add
但应该是
RewriteBase /add
有什么办法可以防止这种情况? 如果不是,我可以运行第二个sed命令,用一个替换所有双斜杠。 但是也许有更优雅的方法可以做到这一点。
我将不胜感激任何帮助。
如果您要做的只是在行中添加一些文本,则不需要反向引用。 尝试这个:
sed -i.bak 's/^M//g;s|RewriteBase.*|&/add|' .htaccess
特殊字符&
表示与模式空间匹配的所有内容。
s/^M//g
部分是与dos2unix
等效的sed,并且通过键入<ctrl+v><ctrl+m>
创建^M
sed包含的结果将包含\\r
,从而使您看起来像文本被粘贴在开头一样。 通过sed将文件通过dos2unix
。
至于第二部分,您需要捕获组外的可选斜杠,然后放入/add
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.