我遵循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>
错误或错过了其他内容?
(我也对其他解决方案持开放态度。)
答案 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