向多个文件添加一行文本

gab*_*be. 11 sed text-processing

所以,我在一个目录中有一堆文件,我需要在每个文件中插入一行文本。它们基本上具有以下格式:


<VirtualHost *:80>
        ServerAdmin gabe@localhost
        DocumentRoot /var/www/test1
        ServerName test1.local
        ServerAlias test1
        <Directory "/var/www/test1">
                Options All
                AllowOverride All
        </Directory>
</VirtualHost>

我想在结束前插入一行

</虚拟主机>
标签。我的第一个假设是我应该能够用 sed 来做到这一点,可能匹配和替换那个标签。我现在要开始尝试这个,但如果有人有办法做到这一点,我很想听听。

小智 12

像这样的东西:

sed 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/'
Run Code Online (Sandbox Code Playgroud)

作品。如果您想在很多文件上重复此命令,您可以执行以下操作:

for i in *; do sed -i 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/' "$i"; done
Run Code Online (Sandbox Code Playgroud)

感谢@ChrisDown,可能会更好(但未经测试):

find . -type f -print0 | while IFS= read -r -d '' filename;\
do sed -i 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/' $filename;\ 
done
Run Code Online (Sandbox Code Playgroud)