74

質問:一致するパターンを含む行の直後に 1 行を印刷したいと考えています。

私のバージョンのは、単純な解決策のように見えるsed次の構文を使用しません (それは で爆発します):+1p

sed -n '/ABC/,+1p' infile

複数行の処理を行う方が良いと思いawkますが、その方法がわかりません。

4

8 に答える 8

46

面白いのは試合後のセリフでしょ?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

それが役立つことを願っています。

于 2013-07-28T13:27:55.227 に答える
6

パターンの後にすべての行を印刷する必要があったため (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' 

上記のスクリプトは、最初の行から始まり、パターンに一致する行で停止する (およびその行を含む) すべての行を削除します。それ以降のすべての行が印刷されます。

于 2016-06-24T19:16:42.787 に答える
3

バージョン:

awk '/regexp/ { getline; print $0; }' filetosearch
于 2013-07-28T15:56:46.903 に答える