grep
一致する行と次の行の両方を印刷するために使用します。
$ egrep -w -A1 "^1234" filename
1234 otherstuff
rightsecondline
awk
上記と同じことを達成するために使用する†</sup>:
$ awk '$1=="1234"{print;getline;print}' filename
1234 otherstuff
rightsecondline
一致に続く行のみを印刷するために使用grep
する(前の通知):<
filename
$ grep -w -H --label=dummy -A1 '^1234' <filename | sed -ne 's#^dummy-##p'
rightsecondline
awk
上記と同じことを達成するために使用する†</sup>:
$ awk '$1=="1234"{getline;print}' filename
rightsecondline
†連続する2行に検索語が含まれておらず、ファイルの最後の行に検索語が含まれていない場合
2つ以上の連続した行に検索語が含まれると予想される場合、たとえば
4567 otherstuff 1234
wrongsecondline
1234 otherstuff once
1234 otherstuff again
rightsecondline
...次に、awk
ステートフルに使用して、次と同じ出力を実現しますgrep -A1
。
$ awk 'pr_after{print;pr_after=0}$1=="1234"{print;pr_after=1}' filename
1234 otherstuff once
1234 otherstuff again
rightsecondline
...そしてawk
、その行がそれ自体が一致している場合でも、一致に続く行を常に印刷するためにステートリーに使用します。
$ awk 'pr_after{print;pr_after=0}$1=="1234"{pr_after=1}' filename
1234 otherstuff again
rightsecondline
...または、awk
1つ以上の一致する行の直後にある一致しない行のみを印刷するためにステートリーに使用して、grep -H | sed
上記と同じ出力を実現します。
$ awk '$1=="1234"{pr_after=1;next}pr_after{print;pr_after=0}' filename
rightsecondline
上記の例で$1=="1234"{...}
は、はパターン/アクションルールです。これは、最初の列がテキストと等しい場合は1234
do ...をpr_after{...}
意味し、変数pr_after
がゼロ以外の空でない値に設定されている場合はdo ...を意味し、次の列を読み取ることgetline
を意味します。行を作成し、getlineの後のステートメントで実行を続行します。これは、次の行を読み取り、最初のパターンで評価を再開next
することを意味します。