如何使用grep同时筛选.html或.php后缀的目标文件?
如何使用grep同时筛选.html或.php后缀的目标文件?
嗨,我来帮你搞定这个需求~你现在已经能筛选出名字带"dan"且后缀是.html的文件了,要加上.php的话,有几种实用的办法:
方法一:用grep的扩展正则实现OR匹配
你可以用grep -E开启扩展正则表达式,这样就能用|来表示“或”的逻辑,命令改成这样:
find . -type f -name "*dan*" | grep -E '\.(html|php)$'
我给你解释下细节:
-E:让grep支持扩展正则,这样|就能直接用来表示“或”\.:转义点号,因为正则里.默认匹配任意字符,转义后才是匹配真正的.$:匹配行尾,确保我们找的是文件后缀(避免匹配到比如test.html.txt这种文件)
方法二:直接用find本身实现,更高效
其实不用管道给grep,直接用find的-o选项就能实现“或”的逻辑,这样减少了进程开销,命令是:
find . -type f -name "*dan*" \( -name "*.html" -o -name "*.php" \)
这里的\( \)是用来分组的,确保-name "*dan*"和后面的两个后缀条件是“且”的关系,也就是找名字含dan并且是html或php文件的目标。
方法三:用Perl兼容正则(部分系统支持)
如果你的系统上grep支持-P选项(比如大部分Linux发行版),也可以这么写:
find . -type f -name "*dan*" | grep -P '\.(html|php)$'
这个和方法一逻辑类似,只是用了Perl风格的正则语法。
另外提个小细节:你原来的grep '.html'其实有个小问题——.会匹配任意字符,比如testXhtml也会被匹配到,所以加上\转义和$定位到行尾会更准确哦~
备注:内容来源于stack exchange,提问作者omarkn
相关产品推荐
相关产品推荐

