したがって、grepでは、-Aを使用して一致の「後」の行を取得でき、-Bを使用して一致の「前」の行を取得できます。また、-Cを使用して、前後の行を取得できます。
このようなデータがあります
boring data
boring data
boring data
interesting value
MARK
boring data
boring data
boring data
interesting value
MARK
次のような出力を取得したいと思います。
interesting value
interesting value
オプション-Bを使用すると、次のようになります。
# cat somefile | grep -B 1 MARK
interesting value
MARK
interesting value
MARK
MARK行を完全に除外したいと思います。
最初のgrep
の後に逆grep
を-v
で追加できます。
$ grep -B1 --no-group-separator 'MARK' somefile | grep -v 'MARK'
interesting value
interesting value
--no-group-separator
を追加して、一致間の区切り線を省略しました。
grep
の使用に縛られていない場合は、awkなどの他のツールを使用できます。
awk '/MARK/ { print saved_line }
{ saved_line=$0 }'
これは、行が一致した場合に保存された行を印刷し、再び必要になった場合に備えてすべての行に保存することを示しています。