我有一个带有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也应出现在列表中,但没有出现。我还应该添加什么条件来捕获此类文件?提前致谢。
您可以通过替换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+个字符,一个数字,.
+个或多个字母数字字符的可选序列以及字符串的结尾(此处是, 文件路径)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句