grepを使用してファイルの最初の行から特定の文字列を取得する方法は?

grepを使用してファイルの最初の行から特定の文字列を取得する方法は?

grepを使用してファイル内の文字列を検索し、そのファイルの最初の行のみを検索するにはどうすればよいですか?

ベストアンサー1

2つのオプションがあります。

そしてawk

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

または、あなたのawkバージョンがそれをサポートしていない場合nextfile(提案してくれたStéphane Chazelasに感謝します):

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

次のファイルに切り替える前に、最初の行だけを読み、一致する場合にのみ印刷されます"pattern"

利点は、フィールドを微調整してパターン(たとえば、$22番目のフィールドでのみ検索)と出力(3番目のフィールドを印刷$3またはFILENAME混合印刷など)を検索できることです。

(「現在の入力レコード番号」、つまり行番号)バージョンを使用すると、FNRgrepする行をより細かく調整できます。FNR==33行目は10、1行目FNR<10は10などです。 (この場合は非常に大きなファイルを扱っていて、バージョンでそれをサポートしている場合は、パフォーマンスを向上させるためにawk混在させることをお勧めします。)FNRnextfile

使用head、ファイル名を保持

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

-vオプションはheadファイル名を印刷し、オプションは一致する行の前の行、つまりファイル名を印刷-B1します。grepファイル名のみが必要な場合は、次にさらにパイプすることができますgrep 。

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

don_crisstiがコメントに気づいたように、パターン自体と一致するファイル名を記録してください。しかし...

おすすめ記事