regex - 使用 reg exp 查找并列出名称中包含数字的文件
问题描述
我有一个带有 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:]]+)?
是一个可选的捕获组,它匹配一个或零个序列 the.
和 1+ 字母数字字符。
请注意,如果文件名包含空格,您的方法将失败。
使用 GNU find
,您可以使用更安全的命令:
find . -regextype posix-extended -regex '.*/.*[0-9](\.[[:alnum:]]+)?$'
传递给的正则表达式find
必须匹配整个字符串,因此.*/
匹配任何 0+ 字符到最后一个字符的初始/
值、任何 0+ 字符、一个数字、一个可选的.
+ 一个或多个字母数字字符序列和字符串的结尾(这里, 文件路径)。
推荐阅读
- angularjs - 如何在没有触摸输入字段的情况下键入数字?
- s4sdk - S/4HANA 扩展 - 多租户
- android - Viewpager 内的多个 Recyclerview 问题
- c++ - 受保护的数据结构元素按值跨函数传递
- javascript - 如何避免 ajax PUT 的 400 (Bad Request)
- r - 如何更改笔记本 Rmarkdown 中的 dpi 内联代码输出
- apache-spark - spark中的dataframe.show()和dataframe.take()有什么区别?为了提高性能,我们需要增加什么?
- php - 在 Woocommerce 管理员、订单和电子邮件中显示自定义付款字段
- mongodb - 我需要将我的 mongo 集合转换为对象数组到字符串数组
- angular - Angular: [disabled]="isDisabled()" 是正确的方法吗?