Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 查找不包含字符串的文件_Regex_Linux_Grep - Fatal编程技术网

Regex 查找不包含字符串的文件

Regex 查找不包含字符串的文件,regex,linux,grep,Regex,Linux,Grep,要查找当前文件夹中包含“foo”的所有文件,我使用: grep -r "foo" . grep -r "bar" . 要查找当前文件夹中包含“bar”的所有文件,我使用: grep -r "foo" . grep -r "bar" . 但是如何找到不包含“foo”和“bar”的所有文件?要打印不包含某些字符串的行,请使用-v标志: grep -r -v "bar" . | grep -v "foo" 这将为您提供不包含foo或bar的所有行 要打印不包含某些字符串的文件,请使用-L标志

要查找当前文件夹中包含“foo”的所有文件,我使用:

grep -r "foo" .
grep -r "bar" .
要查找当前文件夹中包含“bar”的所有文件,我使用:

grep -r "foo" .
grep -r "bar" .

但是如何找到不包含“foo”和“bar”的所有文件?

要打印不包含某些字符串的行,请使用
-v
标志:

grep -r -v "bar" . | grep -v "foo"
这将为您提供不包含
foo
bar
的所有行

要打印不包含某些字符串的文件,请使用
-L
标志。要不匹配多个字符串,可以使用带有
-P
标志的正则表达式(可以使用多个正则表达式标志):

这将打印不包含
foo
bar
的文件列表


感谢您指出这一点。

对于awk,类似于:

awk 'BEGIN {f=ARGV[1] ; ff=0} f != FILENAME { if ( ff>0 ) { print f } ; ff=0 ; f=FILENAME } /SEARCHSTRING/ {ff=1} END {if ( ff>0 ) { print f } }' INPUT_FILE_LIST(PATTERN)

基本上,它读取每个输入文件,如果看到您的
SEARCHSTRING
(可以是正则表达式),它会保存该信息。在完成当前文件(或在最后一个文件之后)后,检查它是否找到了什么,如果找到了,请打印上一个文件名。

尝试下面的方法。这应该行得通

grep-rL-p“(foo | bar)”

试试这个:

  grep  -L -e  "foo\|bar" *

递归搜索目录中不包含XYZ的所有文件

find . -type f | xargs grep -L "XYZ"

-v
表示存在不匹配的行,而不是不存在匹配的行。@AntonKovalenko你说得对,我删除了管道中的
-r
。对于“不匹配的行”,这就是OP所要求的:
grep-v“foo”
goves不匹配的行
foo
。他询问的是根本不包含foo和bar的文件,而不是包含一些非bar行和一些非foo行的文件。@AntonKovalenko哦,当然,我刚刚得到了微妙之处,“我读得有点太快了。”安东科瓦连科纠正道。谢谢你的评论。