繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM