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.py内file2.py.txt
如何自定义grep以便它遍历目录中的每个文件,使用该特定文件名搜索每个文件中的字符串?
编辑:
我正在寻找的输出写在一个单独的文件中,result.txt其中包含:文件名(如果找到匹配项),行文本(找到匹配项的位置)
使用 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)
更换FILENAME用substr(FILENAME, 3)跳过输出的./前缀。
文件列表按词法排序。的那些名字开始与.被忽略(一些炮弹有一个dotglob选项,可以将加回;有zsh,你也可以使用(D)水珠预选赛)。