web-dev-qa-db-ja.com

bashの数行ごとに特定のテキスト/タグを追加する

.txtファイルに(通常のテキストの形式で)タグを追加する必要があるテキストファイルがあります。

たとえば、次のようなテキストファイルがあるとします。

a
b
c
d
e
f
g
h

タグを追加したい<hello>および</hello> 3行ごとにそれぞれ前と後、次のようにします。

<hello>
 a
 b
 c
</hello>
<hello>
 d
 e
 f
</hello>
<hello>
 g
 h
</hello>

どうすればこれを達成できますか?

3

これが1つの方法です。

$ sed -e '1~3i<hello>' -e '3~3{$!a</hello>' -e'}' -e '$a</hello>' a.txt
<hello>
a
b
c
</hello>
<hello>
d
e
f
</hello>
<hello>
g
h
</hello>

説明:

  • 1~3i<hello>挿入<hello> 1行目から3行ごと
  • 3~3a</hello>追加</hello> 3行ごと、3行目から開始、ただしファイルの最終行を除く$
  • 最終行$、行番号に関係なく終了タグを追加します

ファイルに3行の正確な倍数が含まれている場合、それはより簡単です-ただ

sed -e '1~3i<hello>' -e '3~3a</hello>' a.txt
3
steeldriver