我有一個grep命令返回超過20行。我需要顯示從grep的結果的最後一行4號線,最後第n行grep命令
可以說,我的文件有以下數據,
的test.txt
one
two
three
four
five
six
seven
eight
nine
ten
任務是:
grep "nine" test.txt // i want seven as result
有人可以幫助我嗎?
我有一個grep命令返回超過20行。我需要顯示從grep的結果的最後一行4號線,最後第n行grep命令
可以說,我的文件有以下數據,
的test.txt
one
two
three
four
five
six
seven
eight
nine
ten
任務是:
grep "nine" test.txt // i want seven as result
有人可以幫助我嗎?
如果你想從最後的第n行,那麼顯然你的輸入是有限的,所以你不需要流媒體解決方案。所以你不妨倒轉輸入並從頭開始打印第n行:
grep ... | tac | sed -n "${n}{p; q; }"
您可以使用grep
-B
選項把你的搜索行之前的任何數量的線,然後head -1
將讓你從輸出的第一行:
grep -B2 nine file | head -1
seven
非常感謝你 –
考慮:
$ cat file
one
two
three
four
five
six
seven
eight
nine
ten
你可以使用awk
將n+1
中的行數保存在一個緩衝區中,然後打印出n
行之前的行:
$ awk -v n=2 'BEGIN{b=n+1} { buf[NR%b]=$0 } /nine/{ print buf[(NR-n)%b] }' file
seven
在awk中:
$ 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
。
非常感謝你 –
我不明白。 「grep」怎麼能用「seven」返回這行? – Barmar
我想要結果「七」,雖然我使用搜索字符串作爲九。使用grep/awk/sed結果的最後第n行。 –
'seven'在'nine'前面是2行,你的問題在比賽前說「第4行」。 – Barmar