2017-04-24 6 views
-1

grepコマンドで20行以上を返します。私は最後のn行目のgrepコマンド

test.txtという、

は、私のファイルは、データの下に持って言うことができます、grepの結果の最後の行から4番目の行を表示する必要が

one 
two 
three 
four 
five 
six 
seven 
eight 
nine 
ten 

タスクは次のとおりです。

grep "nine" test.txt // i want seven as result 

誰かがこれで私を助けてくれますか?

+0

私は分かりません。 'grep" nineはどのように '' 7 ''という行を返しますか? – Barmar

+0

検索文字列を9として使用していますが、結果「7」が欲しいです。 grep/awk/sedを使用して結果の最後のn番目の行。 –

+3

'seven'は' nine'の前に2行、あなたの質問は試合の前に "4th line"と書いてあります。 – Barmar

答えて

0

最後からn番目の行が必要な場合は、入力が制限されているため、ストリーミングソリューションは必要ありません。だから、入力を逆にして最初からn番目の行を印刷するかもしれません:

grep ... | tac | sed -n "${n}{p; q; }" 
4

あなたの検索行の前に任意の数の行を取るためにgrep-Bオプションを使用することができ、その後head -1はあなたの出力から最初の行を取得します:考える

grep -B2 nine file | head -1 

seven 
+1

ありがとうございます –

0

$ cat file 
one 
two 
three 
four 
five 
six 
seven 
eight 
nine 
ten 

あなたをawkを使用して、n+1の行数をバッファに保存してから、一致する前にn行の行を印刷することができます。

awkでは
$ awk -v n=2 'BEGIN{b=n+1} { buf[NR%b]=$0 } /nine/{ print buf[(NR-n)%b] }' file 
seven 
0

$ awk -v s=nine '$0~s{print q}{q=p;p=$0}' file 
seven 

を説明:

awk -v s='nine' ' # search string into s var 
$0~s { print q } # if match, print buffer q 
{ q=p; p=$0 }  # q is previous of previous 
' file 

をあなたはprint q;exitを追加することができる唯一の一致があるように起こっている場合。

+0

ありがとうございました –

関連する問題