【问题标题】:Find and list files containing numbers in names with reg exp使用正则表达式查找并列出名称中包含数字的文件
【发布时间】:2019-11-22 09:41:04
【问题描述】:

我有一个带有 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 -E '^-.*[0-9](\.[[:alnum:]]+)?$' 替换grep '^-' | grep -e '[0-9]\+\.'?请注意,如果文件名包含空格,您的方法将失败
  • 是的,这适用于我的情况!谢谢。所以据我了解,搜索不带扩展名的文件的主要机制是(\.[[:alnum:]]+)?$,对吧?
  • (\.[[:alnum:]]+)? 是一个可选的捕获组,匹配. 和1+ alnum 字符的一个或零序列

标签: regex sed grep numbers filenames


【解决方案1】:

您可以通过将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+ 个字符、一个数字、@987654330 的可选序列@ + 一个或多个字母数字字符和字符串的结尾(此处为文件路径)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2011-11-14
    相关资源
    最近更新 更多