ググっても日本語サイトでは事例が見当たらなかった。スペースを削除する事例ばかり。stackoverflowでやり方を見つけた。
今回は、特定の文字列を持つhtmlファイルに対して、タグを一行挿入しかつインデントを揃えるということをsedコマンドでやりたかった。
・・・省略・・・ <ul> <li>Hello</li> </ul> ・・・省略・・・
例えば上記のhtmlコードを含むファイルが特定のフォルダ内に複数あったとして、「<li>Hello</li>」の一行下に「<li>World</li>」を追加し、さらにインデントを揃える場合は、以下のsedコマンドを使う。
grep -r 'Hello' sample_dir | awk -F':' '{print $1}' | while read line do sed -i -e '/Hello/a \ <li>World</li>' $line done
要点は「a \」の部分。「a」だけだと文字列は追加できるけどスペースは追加できない。「\」を指定することによってスペースを追加することができる。
実はManにも記載されているのだが、stackoverflowの回答を見るまでは改行挿入用なのかと誤解していた。
a \
https://linuxjm.osdn.jp/html/GNU_sed/man1/sed.1.html
text
text を追加する。text に改行を含める場合は、各改行の前にバックスラッシュを置く。
便利。