Shell文件名替换零或一出现

时间:2018-12-13 03:01:43

标签: regex shell file substitution

具有以下文件列表:

-rw-r----- 1 mysql install 80550 Dec 11 16:40 TEST30042.log
-rw-r----- 1 mysql install 74006 Dec 11 17:39 TEST30032.log
-rw-r----- 1 mysql install 74566 Dec 11 17:39 TEST30012.log
-rw-r----- 1 mysql install 88435 Dec 11 17:39 TEST32.log
-rw-r----- 1 mysql install 79540 Dec 11 17:39 TEST30022.log
-rw-r----- 1 mysql install 17276 Dec 11 21:07 TEST30021.log
-rw-r----- 1 mysql install 15623 Dec 11 21:07 TEST31.log
-rw-r----- 1 mysql install 17280 Dec 11 21:07 TEST30031.log
-rw-r----- 1 mysql install 16302 Dec 11 21:07 TEST30011.log
-rw-r----- 1 mysql install 16002 Dec 11 21:07 TEST30041.log
-rw-r----- 1 mysql install 29035 Dec 12 14:00 TEST30010.log
-rw-r----- 1 mysql install 16926 Dec 12 14:00 TEST30020.log
-rw-r----- 1 mysql install 14381 Dec 12 14:00 TEST30040.log
-rw-r----- 1 mysql install 29157 Dec 12 14:00 TEST30030.log
-rw-r----- 1 mysql install 21761 Dec 12 14:00 TEST30.log
-rw-r----- 1 mysql install  5977 Dec 12 15:02 TEST3002.log
-rw-r----- 1 mysql install  6670 Dec 12 15:03 TEST3001.log
-rw-r----- 1 mysql install  6670 Dec 12 15:03 TEST3003.log
-rw-r----- 1 mysql install  6526 Dec 12 15:03 TEST3004.log
-rw-r----- 1 mysql install  7167 Dec 12 19:29 TEST3.log

尝试使用以下命令仅列出名称为TEST3.log,TEST30.log,TEST31.log,TEST32.log的文件。但是没有得到想要的输出。

$ ls -ltr TEST3?.log
-rw-r----- 1 mysql install 88435 Dec 11 17:39 TEST32.log
-rw-r----- 1 mysql install 15623 Dec 11 21:07 TEST31.log
-rw-r----- 1 mysql install 21761 Dec 12 14:00 TEST30.log

据我了解,“?”是零或单次出现的符号。无法弄清楚为什么会遗漏TEST3.log文件。

预期产量

-rw-r----- 1 mysql install 88435 Dec 11 17:39 TEST32.log
-rw-r----- 1 mysql install 15623 Dec 11 21:07 TEST31.log
-rw-r----- 1 mysql install 21761 Dec 12 14:00 TEST30.log
-rw-r----- 1 mysql install 21761 Dec 12 14:00 TEST3.log

找到一种方法可以做到这一点

ls -ltr TEST3?.log TEST3.log
-rw-r----- 1 mysql install 88435 Dec 11 17:39 TEST32.log
-rw-r----- 1 mysql install 15623 Dec 11 21:07 TEST31.log
-rw-r----- 1 mysql install 21761 Dec 12 14:00 TEST30.log
-rw-r----- 1 mysql install 21761 Dec 12 14:00 TEST3.log

想知道是否有更好的最简单方法。

谢谢。

1 个答案:

答案 0 :(得分:0)

?运算符恰好表示一个通配符。没有用于零个或一个字符的运算符。您将不得不通过另一个工具使用循环或管道ls

我假设您使用的是基于目录列表的Linux。