如何以递归方式查看包含一个字符串且不包含其他字符串的文件列表?另外,我的意思是查看文件内部,而不是文件名。
答案1
您可以使用查找:
find . -type f -name "$fileglob" -exec grep -q $word1 {} \; -not -exec grep -q $word2 {} \; -print
答案2
假设你确实想要一个字符串,而不是一个正则表达式,因此fgrep
,那么:
fgrep -rl --null desired_string . | xargs -0 fgrep -lv undesired_string --
在当前目录下递归 ( -r
) grep ,打印文件名 ( ) 并使用其中的文件名,反复调用 fgrep(以便在调用时不会填满命令行参数的空间),并反转匹配的含义。desired_string
-l
-v
这用于--null
在每个文件名后使用 ASCII NUL 字符,而不是换行符,这样您就可以处理带有空格等的文件名;这会将给-0
定的内容插入到 xargs 中。根据 Unix 变体(Linux、BSD 等),可能有一个简短的选项--null
,但可移植性较差。严格来说,--null
不可移植,但任何现代系统的 (f)grep 都应该有它。
第二--
个 (f)grep 末尾的 停止 (f)grep 在任何后续参数中查找选项,因此即使您有一个以 开头的文件名-
,它仍将被处理为文件名。