Text-Processing

如何在多個文件中添加一行

  • November 18, 2018

我有很多**.html**文件,我需要在每個文件的< head > 開始標記之後添加一個元標記。

我怎麼能這樣做?

是否vim適合該任務?

vim中,您可以執行以下操作:

:%s/&lt;head\b[^&gt;]*&gt;/& &lt;meta foo="bar"&gt;/g

您也可以在 GNU 中執行此操作sed,這可能更合適:

for file in *.html; do
   sed -i 's/&lt;head\b[^&gt;]*&gt;/& &lt;meta foo="bar"&gt;/g' "$file"
done

請注意,-i破壞符號連結。

sed -i '/PATTERN/ a\
   Line which you want to append' filename

對於這個例子

sed -i '/&lt;HEAD&gt;/a &lt;meta&gt;' test.txt
&lt;HEAD&gt;
&lt;HEAD&gt;

結果 :

&lt;HEAD&gt;
&lt;meta&gt;
&lt;/HEAD&gt;

上面的命令將在字元串匹配後追加新行。但是,如果文件的輸入字元串為

&lt;HEAD&gt;&lt;TITLE&gt;&lt;/TITLE&gt;
&lt;/HEAD&gt;

結果:

&lt;HEAD&gt;&lt;TITLE&gt;&lt;/TITLE&gt;
&lt;meta&gt;
&lt;/HEAD&gt;  //which is wrong.

也許我們可以嘗試這種方法:

sed -i 's/&lt;HEAD&gt;/&lt;HEAD&gt;&lt;meta&gt;/' filename

引用自:https://unix.stackexchange.com/questions/59385