
パターンを含む線が検出された場合夜、異なるパターンを含む対応する線を検出する必要があります。===これは、以下のように高い行でのみ発生します。
- 文書の内容:
===
test1.log
ブバゲーム
===ファイル23.txt
夜78
遠く
夜
テキスト
=== log3.c
AAA
制限
夕方3
- 出力:
===ファイル23.txt
夜78
夜
=== log3.c
夕方3
答え1
次のように awk を使用してこれを実行できます。
awk '/===/ {SEC=$0;PRINTED=0} /night/ {if(!PRINTED) print SEC; print $0; PRINTED=1;}' <file>
行を見つけて===
保存し、まだ行を印刷していないことを確認します。次に、パターンが見つかった場合はnight
セクションヘッダーが印刷されたことを確認し、そうでない場合は印刷し、現在の行を印刷し、セクションヘッダーが印刷されたことを示します。
答え2
sedでこれを試しました。
sed -n '/===/{
h
d
}
/night/{
G
s/\(.*\)\n\(.*\)/\2\
\1/p
}' inputFile
これはまさにあなたが望むものではありませんが、非常に似ています。
=== file23.txt
night78
=== file23.txt
night
=== log3.c
night3
/==
現在のモードをバッファに保存/night
トークンの夜を含むすべての行に一致します。G
現在のバッファを現在のパターン空間に追加します。/s
現在のパターン文字列と現在のバッファ文字列の位置を置き換えます。