Unixでは、パターンを検出するときにそれに対応する他のパターンも検出する必要があります。

Unixでは、パターンを検出するときにそれに対応する他のパターンも検出する必要があります。

パターンを含む線が検出された場合、異なるパターンを含む対応する線を検出する必要があります。===これは、以下のように高い行でのみ発生します。

  • 文書の内容:

===
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現在のパターン文字列と現在のバッファ文字列の位置を置き換えます。

関連情報