bash - tail多行 - 我可以只grep文件的前n行嗎?




sed排除 (8)

我有很長的日誌文件,是否有可能要求grep只搜索前10行?


grep -A 10 <模式>

這是為了在模式之後抓取模式和接下來的10行。 這只適用於已知模式,如果您沒有已知模式,請使用“頭部”建議。


head -10 file的輸出可以通過管道傳輸到grep以完成此操作:

head -10 file | grep …

使用Perl:

perl -ne 'last if $. > 10; print if /pattern/' file

對Joachim Isaksson的回答的擴展:很多時候我需要從長文件中取出一些東西,例如5001到5020行,在這種情況下,您可以將headtail組合在一起:

head -5020 file.txt | tail -20 | grep x

這得到了第一個5020行,然後只顯示了其中的最後20行,然後將所有內容都傳遞給grep。

(編輯:我的例子中的fencepost錯誤,添加管道到grep)


對於在Google上發現這種情況的人,我需要搜索多個文件的前n行,但只打印匹配的文件名。 我用了

 gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames

FNR..nextfile一旦看到10行就停止處理文件。 //..{}打印文件名並在給定文件中的第一個匹配出現時繼續。 要引用其他程序的文件名,請使用

 gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames

我有類似的問題,所有上述問題都沒有完全解決。 我也有興趣獲取包含匹配行的文件名。 我的解決方案

ls |parallel --gnu 'cat <(echo {}) <(head {})|grep -B1 -m1 -P "^>.*F3$"'

注意:在我的情況下模式總是匹配第一行。


或者在沒有|情況下將awk用於單個進程 :

awk '/your_regexp/ && NR < 11' INPUTFILE

在每一行上,如果your_regexp匹配,並且記錄(行)數小於11,它將執行默認操作(即打印輸入行)。

或者使用sed

sed -n '/your_regexp/p;10q' INPUTFILE 

檢查您的正則表達式並打印行( -n表示不打印輸入,否則為默認值),並在第10行之後退出。


頭-10 log.txt | grep -A 2 -B 2 pattern_to_search

頭-10 log.txt:讀取文件的前10行。

-A 2:在圖案之前打印兩行。

-B 2:在圖案後面打印兩行。


grep "pattern" <(head -n 10 filename)




grep