find posix-extended正则表达疑问

sh/bash/dash/ksh/zsh等Shell脚本
回复
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

find posix-extended正则表达疑问

#1

帖子 ps3wifi » 2020-05-25 21:32

边学find边在学正则表达式但发现find的正则表达式有点不同
find . -type -f -regextype posix-extended -regex ".*\^a{1,2}.txt"想查找当前目录下a开头的后匹配1-2个字符的.txt文件,最后一个都没有匹配出来,换成".*\a[0-9]{1,2}.txt"就可以匹配到,另外用".*\a{1,2}.txt"匹配到是emoji-data.txt(不知道这个文件是怎么匹配出来的)麻烦各位大佬帮我解疑,find的正则表达式网上教程少得可怜,有没有推荐的书或者教程下载,感谢感谢
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: find posix-extended正则表达疑问

#2

帖子 astolia » 2020-05-25 23:13

拿30分钟正则表达式教程里的内容就足以解答你的疑问了,先把基础学好吧

用find .搜出来的路径是./XXXX这样的,-regex是匹配整个路径,这两点你应该知道了。那么来看一下你写的正则是什么个鬼东西
ps3wifi 写了: 2020-05-25 21:32 ".*\^a{1,2}.txt"想查找当前目录下a开头的后匹配1-2个字符的.txt文件
.*:匹配任意长度的任意字符串
\^:转义^,使其不再匹配字符串开头,而是匹配字符^
a{1,2}:匹配a或aa
.:匹配任意一个字符
txt:匹配txt
连起来看就是,匹配以^aaXtxt或^aXtxt结尾的路径,其中X代表任意字符
所以这个正则能够匹配./^a.txt、./^aa.txt、./^abtxt、./123^abtxt等等文件


ps3wifi 写了: 2020-05-25 21:32 ".*\a[0-9]{1,2}.txt"就可以匹配到
再来看这个
.*:匹配任意长度的任意字符
\a:转义a,错误写法,无意义。匹配字符a
[0-9]{1,2}:匹配1个或2个0-9的字符
.:匹配任意一个字符
txt:匹配txt
连起来看就是,匹配以aNXtxt或aNNXtxt结尾的路径,其中N代表0-9中的字符,X代表任意字符
所以这个正则能够匹配./a1.txt、./a12.txt、./a1atxt、./a12txt、./abca12txt等等文件


ps3wifi 写了: 2020-05-25 21:32 另外用".*\a{1,2}.txt"匹配到是emoji-data.txt(不知道这个文件是怎么匹配出来的)
同样的,这个正则匹配以aXtxt或aaXtxt结尾的路径,其中X代表任意字符
emoji-data.txt符合aXtxt模式


符合你需求的正则写法是

代码: 全选

\./a.{1,2}\.txt
自己分析一下为什么


ps3wifi 写了: 2020-05-25 21:32 find的正则表达式网上教程少得可怜,有没有推荐的书或者教程下载,感谢感谢

代码: 全选

info find
按Page Down键翻到8.5章就是
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: find posix-extended正则表达疑问

#3

帖子 ps3wifi » 2020-05-26 0:01

谢谢版主,太详细了,\./a.{1,2}\.txt,用\转义.防止变成特殊符号.匹配任意字符,./a.{1,2}是当前路径下a开头最多后面匹配2个字符,再用\.转义.变成.txt后缀文件名,但是版主我始终用^无法匹配,这个该怎么书写???
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: find posix-extended正则表达疑问

#4

帖子 astolia » 2020-05-26 10:46

ps3wifi 写了: 2020-05-26 0:01 但是版主我始终用^无法匹配,这个该怎么书写???
astolia 写了: 2020-05-25 23:13 -regex是匹配整个路径,这两点你应该知道了
现在看来你还是不清楚匹配整个路径的含义。用find -regex a的时候,并不是查找包含a的路径,而是查找就是为a的路径。也就是说,实际效果是^a$。所以你没必要再加上^和$
还有,^是代表整个字符串的开头,不是字符串中某一部分的开头,只在正则式的最前面才有意义
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: find posix-extended正则表达疑问

#5

帖子 ps3wifi » 2020-05-26 18:47

谢谢版主,又学到新知识了
回复