Grep

在返回完整路徑時查找具有基本名稱匹配模式的文件

  • March 12, 2018

我需要匹配正則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.txtwhere結尾的目錄中的所有文件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.

引用自:https://unix.stackexchange.com/questions/429766