搜索包含文件名的字符串

use*_*654 4 grep search text-processing file-search

我在一个目录中有大量文件。这些文件包含任意文本。

我想在该特定文件文本中搜索文件名。澄清一下,我有file1.py.txt(是的,两个点.py.txt)并且file2.py.txt都包含文本。我想搜索的字符串存在@code prefix.file1.py内部file1.py.txt和字符串@code prefix.file2.pyfile2.py.txt

如何自定义grep以便它遍历目录中的每个文件,使用该特定文件名搜索每个文件中的字符串?

编辑:

我正在寻找的输出写在一个单独的文件中,result.txt其中包含:文件名(如果找到匹配项),行文本(找到匹配项的位置)

Sté*_*las 8

使用 GNU awk

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

将报告匹配的行。

要打印文件名和匹配行,请更改index($0, search)

  index($0, search) {print FILENAME": "$0}
Run Code Online (Sandbox Code Playgroud)

或者只打印文件名:

  index($0, search) {print FILENAME; nextfile}
Run Code Online (Sandbox Code Playgroud)

更换FILENAMEsubstr(FILENAME, 3)跳过输出的./前缀。

文件列表按词法排序。的那些名字开始与.被忽略(一些炮弹有一个dotglob选项,可以将加回;有zsh,你也可以使用(D)水珠预选赛)。