使用sed插入带有转义搜索模式的行

时间:2016-02-12 00:28:01

标签: bash shell sed

我遵循using sed to insert lines的示例到特定模式匹配位置的文件中。我在我的机器上运行了这个问题的例子,它运行得很好。

所以,对我来说,具体来说,我试图插入以下内容:

<Location "someplace">
    AuthBasicProvider ldap
    AuthType Basic
    AuthName "Auth"
    AuthLDAPURL someurl
    AuthzLDAPAuthoritative on

    AuthLDAPBindDN someuser
    AuthLDAPBindPassword somepassword
</Location>

我想将它插入.conf文件(this one to be exact)的末尾,特别是在结束</VirtualHost>之前。

然而,当我跑

sed -n 'H;${x;s/\<\/VirtualHost> .*\n/test string &/;p;}' vhost.conf

进行测试,打印文件内容但文件未更改。我是否错过</VirtualHost>错误或错过了其他内容?

(我也对其他解决方案持开放态度。)

3 个答案:

答案 0 :(得分:3)

这适用于GNU Sed:

sed -i -n 'H;${x;s/<\/VirtualHost>.*/    test string\n&/;p;}' vhost.conf

对于OSX / BSD:

sed -i '' -n 'H;${x;s/<\/VirtualHost>.*/    test string\'$'\n''&/;p;}' vhost.conf

答案 1 :(得分:1)

这可能适合你(GNU sed):

cat <<\! | sed -i '/<\/VirtualHost>/e cat /dev/stdin' file
test string
to be
inserted
!

或者更容易:

sed -i '/<\/VirtualHost>/i\
test string\
to be\
inserted' file

答案 2 :(得分:0)

使用-i开关进行就地替换:

sed -i -n 'H;${x;s/\<\/VirtualHost> .*\n/test string &/;p;}' vhost.conf