web-dev-qa-db-ja.com

ラインパターンの最後の出現をgrepする方法

内容のあるファイルがあります

x
a
x
b
x
c

最後の出現をgrepしたい、

x
c

私が試みるとき

sed -n  "/x/,/b/p" file

xからcまでのすべての行をリストします。

13
user3702858

私はあなたの質問が正しいかどうかわからないので、暗闇の中でいくつかのショットがあります:

  • 最後の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
    
31
steffen

これはあなたのために働くかもしれません(GNU sed):

sed '/x/h;//!H;$!d;x' file

最後のxとそれに続くものをホールドスペースに保存し、ファイルの終わりに出力します。

3
potong

sedを使用してそれを行う方法がわかりませんが、awkを試すことができます

awk '{a=a"\n"$0; if ($0 == "x"){ a=$0}}  END{print a}' file
1
ray
grep -A 1 x file | tail -n 2

-A 1は、grepに一致行の1行後に印刷するよう指示します
_tailを使用すると、最後の2行が取得されます。

または逆の方法で:

tac fail | grep -B 1 x -m1 | tac

注:パターンが十分に「強力」であることを確認して、適切な線が表示されるようにしてください。つまり、開始時に^で、終了時に$で囲むことにより。

1
elig