Linux

如何使用 grep 僅在文件的第一行搜尋特定字元串?

  • August 24, 2021

如何使用 grep 在文件中查找字元串,但僅在這些文件的第一行中搜尋?

我已經實現了@Rob 的註釋並成功獲得了想要的結果。

替換string為您的字元串。

grep -Rin "string" . | grep ":1:.*string" > result.txt

這將在目前目錄中進行不區分大小寫的遞歸搜尋string並列印行號。然後它在第 1 行的文件中搜尋匹配項並將輸出保存到名為result.txt.

還有兩種選擇:

awk

awk '{if ($0~"pattern") print $0; nextfile;}' mydir/*

或者如果您的awk版本不支持nextfile(感謝 Stéphane Chazelas 的建議):

awk 'FNR==1{if ($0~"pattern") print $0;}' mydir/*

在切換到下一個文件之前將只讀取第一行,並且僅在匹配時列印它"pattern"

優點是可以微調要在其上搜尋模式的$2欄位(例如,僅使用在第二個欄位上搜尋)和輸出(例如$3,列印第三個欄位,或者FILENAME,甚至混合)。

請注意,使用FNR(“目前輸入記錄號”,即行號)版本,您可以進一步微調您想要 grep 的行:FNR==3對於第三行,FNR<10對於前 10 行等。(I猜測在這種情況下,如果您正在處理非常大的文件並且您的awk版本支持它,您可能希望混合FNR使用nextfile以提高性能。)

使用head, 保留文件名

head -n1 -v mydir/files*|grep -B1 pattern

-voption ofhead將列印文件名,option -B1ofgrep將列印匹配行的前一行——即文件名。如果您只需要文件名,您可以將其進一步通過管道傳輸到grep :

head -n1 -v mydir/*|grep -B1 pattern|grep ==>

正如 don_crissti 在評論中所注意到的那樣,請注意與模式本身匹配的文件名,不過……

引用自:https://unix.stackexchange.com/questions/192148