私のディレクトリにはたくさんのファイルセットがあります。これらのファイルには任意のテキストが含まれています。
その特定のファイルのテキスト内でファイル名を検索したいと思います。明確にするためにfile1.py.txt
(はい、2つの点.py.txt
)file2.py.txt
、どちらもテキストを含みます。@code prefix.file1.py
内部文字列が存在するか、内部file1.py.txt
文字列があるかを検索したいと思います。@code prefix.file2.py
file2.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)