一般ファイルの最初の10行から10個の「main()」を探します。

一般ファイルの最初の10行から10個の「main()」を探します。

最初の10行に「main()」テキストを含む通常のファイルに対応する引数を印刷するコマンドを作成します。
すべてのファイルを検索して最初の10行を見つけるにはどうすればよいですか?

ベストアンサー1

GNU grepとPerlの正規表現を利用することもできます。これにより、入力ファイルの最初の10行以内に、main()文字列を含むすべての行が出力されます。

この-zオプションを使用すると、ファイルを解析し、grep操作用の1つの大きな文字列として処理できます(NUL文字を含まない限り)。-PgrepのPerlモードを有効-oにして一致する部分を表示し、-h一致する行の横に表示されないようにファイル名を非表示にし、-lファイル名のみを一覧表示します。

ファイル名と一致する行が必要な場合:

grep -HPoz  '\A(.*\n){0,9}\K[^\n]*main\(\)[^\n]*\n' file.txt

唯一一致する行は次のとおりです。

grep -hPoz '\A(.*\n){0,9}\K[^\n]*main\(\)[^\n]*\n' file.txt

-hファイルが複数ある場合にのみ必要)

ファイル名のみ:

grep -Pozl '\A(.*\n){0,9}\K[^\n]*main\(\)[^\n]*\n' file.txt

再帰なしで現在のディレクトリを実行するには:(ofc、上記のように要求時にgrepオプションを指定する必要があります)

find . ! -name . -prune -type f \
  -exec grep -HPoz '\A(.*\n){0,9}\K[^\n]*main\(\)[^\n]*\n' {} +

おすすめ記事