Grep
在返回完整路徑時查找具有基本名稱匹配模式的文件
我需要匹配正則
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
排除以 開頭的文件,pure_
還可以grep
使用以下-regex
表達式:find ./path -mindepth 1 -maxdepth 2 -type f ! -name 'pure_*' -regex '.*\.[0-9][0-9][0-9].txt$'
使用範例中的模擬目錄中的副本,我得到:
./path/1/file1.001.txt ./path/1/file2.001.txt ./path/2/file3.002.txt
find
沒有正則表達式匹配:find /path -type f ! -name 'pure_*' -name '*[0-9][0-9][0-9].txt'
這將在
/path
目錄中或目錄下找到名稱不以pure_
三位數開頭但以.txt
.