使用正则表达式查找并列出名称中包含数字的文件

我有一个输出为ls -lR命令的文件。如何在其中找到并列出文件名中包含数字/数字的文件的名称?

输出文件的一部分:

/home/guest/tmp:
total 48
drwxrwxr-x. 3 guest guest 4096 Nov  9 17:26 dir1
drwxrwxr-x. 2 guest guest 4096 Nov  9 15:58 dir13
-rw-rw-r--. 1 guest guest  280 Nov  9 16:59 file1.txt
-rw-rw-r--. 1 guest guest  334 Nov  9 16:55 file2.txt
-rw-rw-r--. 1 guest guest  556 Nov  9 17:33 file3.txt
-rw-r--rw-. 1 root  root  2088 Nov 15 13:33 log
-rw-rw-r--. 1 guest guest    0 Nov 21 16:33 log2
-rw-rw-r--. 1 guest guest    0 Nov 21 16:34 log3
-rw-rw-r--. 1 guest guest  319 Nov 20 16:05 rx_tx_bytes.txt

我曾经为此

cat <path to lsoutput> | grep '^-' | grep -e '[0-9]\+\.' | awk '{print $9}'

这会给出正确的结果,但不会列出名称中没有扩展名的文件。例如,文件名log2和log3也应出现在列表中,但没有出现。我还应该添加什么条件来捕获此类文件? 预先感谢。

karymxk 回答:使用正则表达式查找并列出名称中包含数字的文件

您可以通过将grep '^-' | grep -e '[0-9]\+\.'替换为grep -E '^-.*[0-9](\.[[:alnum:]]+)?$'来“快速修复”代码。

在这里,(\.[[:alnum:]]+)?是一个可选的捕获组,它匹配.和1+个字母数字字符的一个或零个序列。

请注意,如果文件名包含空格,则您的方法将失败。

对于GNU find,您可以使用更安全的命令:

find . -regextype posix-extended -regex '.*/.*[0-9](\.[[:alnum:]]+)?$'

传递给find的正则表达式必须与整个字符串匹配,因此,开头的.*/可以匹配任何0+字符到最后一个/,任何0+字符,一个数字, .的可选序列+一个或多个字母数字字符和字符串的结尾(此处为文件路径)。

本文链接:https://www.f2er.com/3051990.html

大家都在问