私が次のことをすると仮定しましょう。
grep 'header\|error'
今、私は空のヘッダー「セクション」をすべて削除したいと思います。たとえば、次のような出力が必要です。
header 1
header 2
error a
error b
header 3
error c
header 4
header 5
error d
~になる
header 2
error a
error b
header 3
error c
header 5
error d
答え1
入力が示されているのと同じであると仮定します。つまり、すべての入力行は「タイトル」または「エラー」の行であり、他に何もありません。
これは働きます:
$ cat test.sh
grep -B1 --no-group-separator ^error << EOF
header 1
header 2
error a
error b
header 3
error c
header 4
header 5
error d
EOF
$ ./test.sh
header 2
error a
error b
header 3
error c
header 5
error d
スクリプトは、「error」で始まる各行を印刷し、その前の行を印刷します。
答え2
始点として次のようにプレイできます。
grep -zoP 'header.*\nerror.*\n|error.*\n' file.txt
-z
- ファイルを 1 行で処理して '\n' を行うことができます。-o
- 一致するテキストのみを印刷-P
- Perlスタイルの正規表現を有効にする