如何查找不包含给定字符串模式的文件?
如何找出其中不包含单词当前目录下的文件 foo
(使用grep
)?
#1楼
如果您的grep具有-L
(或--files-without-match
)选项:
$ grep -L "foo" *
#2楼
以下命令为我提供了所有不包含foo
模式的文件:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep 0
#3楼
我祝你好运
grep -H -E -o -c "foo" */*/*.ext | grep ext:0
我使用grep -v
尝试只是给了我所有没有“ foo”的行。
#4楼
以下命令可以帮助您过滤包含子字符串“ foo”的行。
cat file | grep -v "foo"
#5楼
grep -irnw "filepath" -ve "pattern"
要么
grep -ve "pattern" < file
上面的命令将为我们提供结果,因为-v查找正在搜索的模式的逆函数
#6楼
您实际上需要:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep :0\$
#7楼
看看ack
。 它会自动为您执行.svn
排除,为您提供Perl正则表达式,并且只需下载一个Perl程序即可。
与您要查找的内容等效的是ack
:
ack -L foo
#8楼
我的grep没有任何-L选项。 我确实找到解决此问题的方法。
这些想法是:
- 将包含应有字符串的所有文件名转储到txt1.txt中。
- 将目录中的所有文件名转储到txt2.txt中。
用diff命令区别2个转储文件。
grep 'foo' *.log | cut -c1-14 | uniq > txt1.txt grep * *.log | cut -c1-14 | uniq > txt2.txt diff txt1.txt txt2.txt | grep ">"
#9楼
find *20161109* -mtime -2|grep -vwE "(TRIGGER)"
您可以在“查找”下指定过滤器,并在“ grep -vwE”下指定排除字符串。 如果您还需要过滤修改的时间,请在find下使用mtime。
#10楼
打开错误报告
正如@tukan所评论的那样,有一个关于-L
/ --files-without-matches
标志的针对Ag的公开错误报告:
- ggreer / the_silver_searcher:#
--files-without-matches
无法正常工作
由于错误报告的进展很少,因此,只要未解决该错误,就不要依赖下面提到的-L
选项。 请改用此线程中介绍的不同方法。 引用有关错误报告的评论[强调我的]:
有任何更新吗?
-L
完全忽略文件第一行上的匹配项。 好像这不会很快解决, 应该将标志完全删除,因为它实际上根本无法像广告中那样工作 。
Silver Searcher-Ag(预期功能-参见错误报告)
作为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
#11楼
问题
我需要重构一个大型项目,该项目使用.phtml
文件使用嵌入式PHP代码编写HTML。 我想改用Mustache模板。 我想找到任何不包含字符串new Mustache
.phtml
,因为它们仍然需要重写。
解
find . -iname '*.phtml' -exec grep -H -E -o -c 'new Mustache' {} \\; | grep :0$ | sed 's/..$//'
说明
管道前:
找
find .
从此目录开始递归查找文件
-iname '*.phtml'
文件名必须包含.phtml
( i
将其区分大小写)
-exec 'grep -H -E -o -c 'new Mustache' {}'
在每个匹配的路径上运行grep
命令
格列普
-H
始终使用输出行打印文件名标题。
-E
模式解释为扩展的正则表达式(即,强制grep表现为egrep)。
-o
仅打印行的匹配部分。
-c
仅将选定的行数写入标准输出。
这将为我提供所有以.phtml
结尾的文件路径的列表,并计算每个字符串中出现new Mustache
字符串的次数。
$> find . -iname '*.phtml$' -exec 'grep -H -E -o -c 'new Mustache' {}'\;./app/MyApp/Customer/View/Account/quickcodemanagestore.phtml:0
./app/MyApp/Customer/View/Account/studio.phtml:0
./app/MyApp/Customer/View/Account/orders.phtml:1
./app/MyApp/Customer/View/Account/banking.phtml:1
./app/MyApp/Customer/View/Account/applycomplete.phtml:1
./app/MyApp/Customer/View/Account/catalogue.phtml:1
./app/MyApp/Customer/View/Account/classadd.phtml:0
./app/MyApp/Customer/View/Account/orders-trade.phtml:0
第一个管道grep :0$
过滤此列表,使其仅包含以:0
结尾的行:
$> find . -iname '*.phtml' -exec grep -H -E -o -c 'new Mustache' {} \; | grep :0$./app/MyApp/Customer/View/Account/quickcodemanagestore.phtml:0
./app/MyApp/Customer/View/Account/studio.phtml:0
./app/MyApp/Customer/View/Account/classadd.phtml:0
./app/MyApp/Customer/View/Account/orders-trade.phtml:0
第二个管道sed 's/..$//'
去除了每行的最后两个字符,仅保留了文件路径。
$> find . -iname '*.phtml' -exec grep -H -E -o -c 'new Mustache' {} \; | grep :0$ | sed 's/..$//'./app/MyApp/Customer/View/Account/quickcodemanagestore.phtml
./app/MyApp/Customer/View/Account/studio.phtml
./app/MyApp/Customer/View/Account/classadd.phtml
./app/MyApp/Customer/View/Account/orders-trade.phtml
#12楼
您可以单独使用grep来执行此操作(无查找)。
grep -riL "foo" .
这是grep
使用的参数的说明
-L, --files-without-matcheach file processed.-R, -r, --recursiveRecursively search subdirectories listed.-i, --ignore-casePerform case insensitive matching.
如果使用l
(小写),则会得到相反的结果(带有匹配项的文件)
-l, --files-with-matchesOnly the names of files containing selected lines are written
#13楼
当grep没有-L选项(例如IBM AIX)时,除了grep和shell之外,没有任何其他选择:
for file in * ; do grep -q 'my_pattern' $file || echo $file ; done
#14楼
以下命令排除了查找使用第二个grep
过滤出svn
文件夹的需要。
grep -rL "foo" ./* | grep -v "\.svn"
如何查找不包含给定字符串模式的文件?相关推荐
- linux查找出全部doc文件,linux 查找出包含某个字符串的所有文件的方法详解
一.find查找用法 find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expres ...
- linux 查找出包含某个字符串的所有文件的方法详解
一.find查找用法 find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expres ...
- 【Shell】判断是否包含给定字符串
目录 Shell判断字符串包含关系的几种方法 shell中[ ]和[[]]的区别 格式匹配 作者:bandaoyu 链接:https://blog.csdn.net/bandaoyu/article ...
- 【Shell】判断文件是否包含给定字符串
Shell判断文件是否包含给定字符串 给定一个字符,比方说"Hello Linduo",查找相应文件中是否包含该字符. 方式1:grep # grep -c 返回 file中,与s ...
- python 查找文件名包含指定字符串
编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出绝对路径. import os class SearchFile(object):def __init__( ...
- python 文件和目录 当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。
廖雪峰python教程中的<操作文件和目录>下的第二题目的解答, 网址为: http://www.liaoxuefeng.com/wiki/0014316089557264a6b34895 ...
- python 输入文件名查找_python 查找文件名包含指定字符串的方法
编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出绝对路径. import os class searchfile(object): def __init__ ...
- Python查找包含指定字符串的所有文件
代码功能: 查找包含指定字符串的所有文件. 技术要点: 1)广度优先遍历目录树: 2)检查文件中是否包含特定的字符串. 运行效果: 温馨提示 进入公众号,通过菜单"最新资源"==& ...
- 查找Python中给定字符串的所有排列
Python itertools Module Python itertools模块 "itertools" are an inbuilt module in Python whi ...
最新文章
- 点击拖动放大该图片大小
- 横州中学理科2021高考成绩查询,2021年横县高考状元名单资料,今年横县高考状元多少分...
- pmp每日三题(2022年2月18日)
- 轴固定位置_轴承的装配与内外圈固定方法,一文让你搞懂
- Flink SQL 功能解密系列 —— 流式 TopN 挑战与实现
- ThinkPHP 3.2版本 , 无法读取$_SESSION['verify_code']
- 并查集 (Union-Find)算法
- 【数据结构的魅力】004.堆、前缀树、桶排序、排序算法总结
- Tensorflow:print输出控制
- [渝粤教育] 四川大学 西方经济学(微观) 参考 资料
- 让海底电缆给数据中心提供更快的直连
- jmeter生成测试报告
- C# 将Excel导出PDF
- 复现Reducing Complexity of HEVC: A Deep Learning Approach,复现帧内模式,HCPM
- python运行文件时说系统找不到指定文件-python找不到指定文件
- Espresso Idling Resource 使用
- Python 防止死锁的方法
- ahb2apb bridge验证项目介绍
- 游戏客户端安全方案。
- python编程手机模拟点击_python简单的模拟点击(一)