前の行がすでに空でない限り、パターンに一致する各行の前に改行文字を挿入します。

前の行がすでに空でない限り、パターンに一致する各行の前に改行文字を挿入します。

パターンを含む行の前に新しい行を追加する必要があります。パターンは常に現在行の最初の文字列であると仮定できます。例えば

This is a
pattern
This is a
pattern

sed次のコマンドを使用して新しい行を追加できます。

sed -i 's/pattern\+/\n&/g' file

出力を得る

This is a

pattern
This is a

pattern

複数の新しい行が追加されるのを防ぐために(複数回実行する場合)、パターンの前の行が空であることを確認したいと思います。私はこれができることを知っています

if [ "$line" == "" ]; then

しかし、最初にパターンに一致する前の行をどのように決定しますか?

編集:パターンが複数回表示されることがあります。

ベストアンサー1

前の行を予約済みスペースに保存できます。

sed '
 /^pattern/{
   x
   /./ {
     x
     s/^/\
/
     x
   }
   x
 }
 h'

しかし、より明確になりますawk

awk '!previous_empty && /pattern/ {print ""}
     {previous_empty = $0 == ""; print}'

GNU実装に内部編集オプションがsedあるように、GNU実装には1つの機能があります。-iawk-i /usr/share/awk/inplace.awk


^使用しないでください-i inplace現在の作業ディレクトリから最初に拡張機能をgawkロードしようとすると、誰かがそのディレクトリにマルウェアを植えた可能性があります。システムに付属の拡張プログラムのパスは異なる場合があります。出力を参照してください。inplaceinplaceinplace.awkinplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

おすすめ記事