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行,在這種情況下,您可以將head
和tail
組合在一起:
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)