ファイル名を含む文字列の検索

ファイル名を含む文字列の検索

私のディレクトリにはたくさんのファイルセットがあります。これらのファイルには任意のテキストが含まれています。

その特定のファイルのテキスト内でファイル名を検索したいと思います。明確にするためにfile1.py.txt(はい、2つの点.py.txtfile2.py.txt、どちらもテキストを含みます。@code prefix.file1.py内部文字列が存在するか、内部file1.py.txt文字列があるかを検索したいと思います。@code prefix.file2.pyfile2.py.txt

grep特定のファイル名を使用して各ファイルの文字列を検索しながら、ディレクトリ内のすべてのファイルを検索するようにカスタマイズするにはどうすればよいですか。

編集する:

私が探している出力は、result.txtファイル名(一致するものがある場合)、行テキスト(一致するものがある場合)を含む別のファイルに書き込まれます。

ベストアンサー1

GNUの使用awk:

gawk '
  BEGINFILE{search = "@code prefix." substr(FILENAME, 3, length(FILENAME) - 6)}
  index($0, search)' ./*.py.txt

一致する行が報告されます。

ファイル名と一致する行を印刷するには、次のようindex($0, search)に変更します。

  index($0, search) {print FILENAME": "$0}

または単にファイル名を印刷してください:

  index($0, search) {print FILENAME; nextfile}

スキップ可能な出力プレフィックスFILENAMEに置き換えられました。substr(FILENAME, 3)./

ファイルのリストは語彙順にソートされます。で始まる名前は.無視されます(一部のシェルにはdotglob再度追加するオプションがあります。を使用すると、glob修飾子をzsh使用することもできます)。(D)

おすすめ記事