パターンを含む行の前に新しい行を追加する必要があります。パターンは常に現在行の最初の文字列であると仮定できます。例えば
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つの機能があります。-i
awk
-i /usr/share/awk/inplace.awk
^使用しないでください-i inplace
現在の作業ディレクトリから最初に拡張機能をgawk
ロードしようとすると、誰かがそのディレクトリにマルウェアを植えた可能性があります。システムに付属の拡張プログラムのパスは異なる場合があります。出力を参照してください。inplace
inplace
inplace.awk
inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'