内容のあるファイルがあります
x
a
x
b
x
c
最後の出現をgrepしたい、
x
c
私が試みるとき
sed -n "/x/,/b/p" file
x
からc
までのすべての行をリストします。
私はあなたの質問が正しいかどうかわからないので、暗闇の中でいくつかのショットがあります:
最後のx
(正規表現)の出力:
grep x file | tail -1
代わりに:
tac file | grep -m1 x
最初に一致する行から最後までファイルを印刷します。
awk '/x/{flag = 1}; flag' file
最後に一致した行から最後までファイルを印刷します(一致しない場合はすべての行を印刷します)。
tac file | awk '!flag; /x/{flag = 1};' | tac
これはあなたのために働くかもしれません(GNU sed):
sed '/x/h;//!H;$!d;x' file
最後のx
とそれに続くものをホールドスペースに保存し、ファイルの終わりに出力します。
sed
を使用してそれを行う方法がわかりませんが、awk
を試すことができます
awk '{a=a"\n"$0; if ($0 == "x"){ a=$0}} END{print a}' file
grep -A 1 x file | tail -n 2
-A 1
は、grepに一致行の1行後に印刷するよう指示します
_tail
を使用すると、最後の2行が取得されます。
または逆の方法で:
tac fail | grep -B 1 x -m1 | tac
注:パターンが十分に「強力」であることを確認して、適切な線が表示されるようにしてください。つまり、開始時に^
で、終了時に$
で囲むことにより。