如何使用 grep
命令查找当前目录中不包含单词 foo
的文件?
find . -not -regex ".*/foo/.*" -regex ".*"
然后,任何没有被-not过滤掉的路径都将被后续的-regex参数捕获。
make the difference between the 2 dump file with diff command.
grep 'foo' *.log | cut -c1-14 | uniq > txt1.txt
grep * *.log | cut -c1-14 | uniq > txt2.txt
diff txt1.txt txt2.txt | grep ">"
diff
(我认为你需要在命令中加上括号,可能还有一个尖括号之类的符号)。如果你的系统支持这种方式,那就没有问题。但问题是它不支持grep -L
。 - Dexygen根据@tukan的评论,关于-L
/--files-without-matches
标志,Ag存在一个未解决的Bug报告:
由于该Bug报告进展缓慢,下面提到的-L
选项不应被依赖,除非该Bug已经得到解决。请使用本主题中介绍的其他方法。以下是该Bug报告的一条评论[强调我的]:
有任何更新吗?
-L
完全忽略文件第一行的匹配。如果这个问题不能很快得到解决,那么这个标志应该被完全删除,因为它根本不按照广告所说的工作。
作为grep的强大替代品,您可以使用The Silver Searcher - Ag:
类似于ack的代码搜索工具,注重速度。
查看man ag
,我们发现-L
或--files-without-matches
选项:
即,从当前目录开始递归地搜索不匹配... OPTIONS ... -L --files-without-matches Only print the names of files that don´t contain matches.
foo
的文件:ag -L foo
如果您只想在当前目录中搜索不匹配 foo
的文件,只需对递归指定 --depth=0
:
ag -L foo --depth 0
-L
的错误,这有时会失败 - https://github.com/ggreer/the_silver_searcher/issues/238 - tukanfind *20161109* -mtime -2|grep -vwE "(TRIGGER)"
你可以在“find”下指定筛选器,在“grep -vwE”下指定排除字符串。如果需要按修改时间过滤,请在find下使用mtime。
当grep没有-L选项时(例如IBM AIX),还有另一种选择,只需使用grep和shell:
for file in * ; do grep -q 'my_pattern' $file || echo $file ; done
Go
和test
文件的文件。但是我只需要.go
文件。所以我使用了ls *.go | grep -v "_test.go"
code $(ls *.go | grep -v "_test.go")
我有混合了Go文件和测试文件。但是我只需要.go文件。所以我使用了
我只是添加这个来帮助其他人知道我使用的方法。 - ARIF MAHMUD RANAgrep -irnw "filepath" -ve "pattern"
或者
grep -ve "pattern" < file
以上命令将返回结果,-v用于查找被搜索模式的反向。
-l
选项仅打印文件名;但是,这仍会打印包含任何不包含该模式的行的任何文件的名称。我认为OP想要找到不包含任何包含该模式的行的文件。 - tripleeecat file | grep -v "foo"
cat
”(http://www.iki.fi/era/unix/award.html)。 - tripleee