Linux
如何使用 grep 僅在文件的第一行搜尋特定字元串?
如何使用 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
-v
option ofhead
將列印文件名,option-B1
ofgrep
將列印匹配行的前一行——即文件名。如果您只需要文件名,您可以將其進一步通過管道傳輸到grep
:head -n1 -v mydir/*|grep -B1 pattern|grep ==>
正如 don_crissti 在評論中所注意到的那樣,請注意與模式本身匹配的文件名,不過……