我需要匹配正则find
表达式的结果。文件如下:
/path/1/file1.001.txt
/path/1/file2.001.txt
/path/1/file1.001
/path/2/file3.002.txt
/path/2/pure_file3.002.txt
等等
我需要匹配所有以xxx.txt
where结尾的目录中的所有文件xxx
是 3 位数字,并且只匹配那些前面没有 word 的文件名pure_
。此外,我需要返回完整路径。
除了排除以下文件之外,我所有的工作都在工作pure_
:
find /path/ -mindepth 1 -maxdepth 2 -type f | grep -P '.*\.[0-9]{3}.txt'
我试过了:
find /path/ -mindepth 1 -maxdepth 2 -type f | grep -P '.+(?!pure).*\.[0-9]{3}.txt'
但如果我说/path/1/
:
ls -1 | grep -P '^(?!pure).*\.[0-9]{3}.txt'
另一方面,正确排除了这些文件:
ls -1 | grep -P '(?!pure).*\.[0-9]{3}.txt'
才不是。
所以它可能归结为,如何在完整路径中匹配不以pure_
. 我对正则表达式的理解还不够,这可能与我从未理解的环视的原子性有关。
find
没有正则表达式匹配:这将在
/path
目录中或目录下找到名称不以pure_
三位数开头但以.txt
.您可以只告诉
find
排除以 开头的文件,pure_
还可以grep
使用以下-regex
表达式:使用示例中的模拟目录中的副本,我得到:
find
查找从当前目录开始的文件。应用扩展的正
egrep
则表达式,过滤在行尾附加“.txt”的三个数字(点需要转义,否则“Atxt”也会匹配)。grep
过滤掉 ( ) 行带有字符串“-v
pure_”(我不确定“pure_”的位置是否重要)。