我在一个目录中有大量文件。这些文件包含任意文本。
我想在该特定文件文本中搜索文件名。为了澄清,我有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
:将报告匹配的行。
要打印文件名和匹配行,请更改
index($0, search)
为或仅打印文件名:
替换
FILENAME
为substr(FILENAME, 3)
跳过输出./
前缀。文件列表按词法排序。名称以开头的那些
.
将被忽略(某些 shell 可以dotglob
选择将它们添加回来;使用zsh
,您也可以使用(D)
glob 限定符)。需要对找到的每个文件进行 grep。
-l
指示grep
仅在regex
找到时打印文件名。如果文件名不包含任何
/
字符,请尝试以下操作:请参阅
man bash
以下项目:"${fname##*/}"
是file1.py.txt
,如果fname
==a_directory/file1.py.txt
"${basename%.*}"
是file1.py
,如果basename
==file1.py.txt