shell 命令之 find命令二

linux find 命令二 史上最详细

前言:前面说到,-path 是匹配路径的 ,同样的-regex 和-path功能相同,只是以正则表达式为条件进行匹配。 话虽如此,实际用起来还是有几个点要注意一下的。

正则表达式在文本匹配方面有很强大的功能,find命令同时支持正则,使用正则表达式需要使用-regex ,参数具体如下

 find . -regex ".*\(\.txt\|\.pdf \)$"
/*
 这个命令和上面的命令功能相同,看到这里是不是很疑惑?
首先"\(\.txt\|\.pdf \)$"这个很好理解,我们不再多说,这个就表示以.txt或者.pdf结尾。
那么为什么前面还有".*"呢??
1. 虽然-regex表示可以使用正则表达式进行条件匹配,但是-regex 跟普通的find 命令有点区别,"find . \( -name "*.txt" -o -name "*.pdf" \)" 表示根据文件名进行查找,而-regex表示根据文件的路径,进行模式匹配!!!
2. 再看看这个命令 find . 表示在.路径下查找,那么想想.下的所有文件它的全路径名是不是以.开始?? 比如.路径下有文件 first.txt ,second.pdf那么这些文件的全路径是不是./first.txt ./second.pdf? 问题又来了?
那么照这么说,那*就可以匹配./first等等,.txt或者.pdf前面的任意字符了,为什么还有.呢?此外在正则中.是有特殊含义的,.表示匹配任意一个字符,从这个意义上讲完全说不通啊,那么我们想是不是代表要查找的路径啊,因为刚刚执行的是 find .啊??
3, 我们执行的是find . 表示在当前路径下查找,那么我们做个测试,在~下新建a文件夹,我们把first.txt second.pdf 放在a下面,然后我们cd ~进入~进行查找:
~$:find a/ -regex "a*\.txt" 照之前的理解那是不是也应该有结果啊
事实上并没有,但是我们改一下: find a/ -regex ".*\.txt",结果有了
输出:
a/first.txt
这是为什么呢? 留给聪明的你!
*/

总结如下,执行find命令时注意以下两点:
1. -regex 表示连路径一起匹配,并不是单纯的只匹配文件名
2. 使用的技巧,正则表达式应以.*开头,然后后跟要表达的条件的正则表达式。 如下

find . -regex ".*\(\.txt\|\.pdf \)$"
/*
  \(\.txt\|\.pdf \)$ 是不是就表示以.txt或.pdf结尾?
  然后前面加上.*
  专注于逻辑的正则编写,加上.*
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值