質問:一致するパターンを含む行の直後に 1 行を印刷したいと考えています。
私のバージョンのは、単純な解決策のように見えるsed
次の構文を使用しません (それは で爆発します):+1p
sed -n '/ABC/,+1p' infile
複数行の処理を行う方が良いと思いawk
ますが、その方法がわかりません。
面白いのは試合後のセリフでしょ?sed では、次のように実行できます。
sed -n '/ABC/{n;p}' infile
あるいは、grep のAオプションが探しているものかもしれません。
-A NUM, Print NUM lines of trailing context after matching lines.
たとえば、次の入力ファイルがあるとします。
foo
bar
baz
bash
bongo
以下を使用できます。
$ grep -A 1 "bar" file
bar
baz
$ sed -n '/bar/{n;p}' file
baz
それが役立つことを願っています。
パターンの後にすべての行を印刷する必要があったため (ok Ed, REGEX )、これに落ち着きました。
sed -n '/pattern/,$p' # prints all lines after ( and including ) the pattern
しかし、後ですべての行を印刷したかったので(そしてパターンを除外します)
sed -n '/pattern/,$p' | tail -n+2 # all lines after first occurrence of pattern
あなたの場合head -1
、最後に a を追加できると思います
sed -n '/pattern/,$p' | tail -n+2 | head -1 # prints line after pattern
そして、この回答に tlwhitec のコメントを含める必要があります (彼らの sed-strict アプローチは私の提案よりもエレガントであるため):
sed '0,/pattern/d'
上記のスクリプトは、最初の行から始まり、パターンに一致する行で停止する (およびその行を含む) すべての行を削除します。それ以降のすべての行が印刷されます。
バージョン:
awk '/regexp/ { getline; print $0; }' filetosearch