使用grep和*来获取确切的文件名

时间:2016-09-14 09:32:47

标签: linux bash shell grep

我有以下heapdump文件

AppSrv01]# ls -ltr *heapdump*
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3436
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3435
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3434
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3433
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3432
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3431
-rw-r--r-- 1 root root 0 Sep 13 17:03 heapdump.dfsdf

现在如果我使用

ls -ltr| grep heapdump*

我得到以下输出

AppSrv01]# ls -ltr |grep heapdump*
-rw-r--r-- 1 root     root     0 Sep 13 17:03 heapdump.dfsdf

但我用

ls -ltr |grep *heapdump*

我没有输出。任何人都可以帮助我的错误以及如何搜索heapdump文件。

我的预期输出是

ls -ltr | grep *heapdump*

应该给我

-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3436
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3435
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3434
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3433
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3432
-rw-r--r-- 1 root root 0 Sep 13 16:44 hbsbdheapdump.3431
-rw-r--r-- 1 root root 0 Sep 13 17:03 heapdump.dfsdf

由于某种原因我无法使用

ls -ltr *heapdump*

1 个答案:

答案 0 :(得分:2)

看起来你正在混淆使用正则表达式的glob模式,这是grep使用的。

打印包含单词heapdump的文件列表的正确方法如下:

printf '%s\n' *heapdump*

在这里,*heapdump*由shell进行全局扩展,以匹配" heapdump"其次是其他任何事情。与模式匹配的所有文件都将传递给printf,后者会打印每个文件后跟换行符。

如果要过滤ls -ltr的输出,则可以使用:

ls -ltr *heapdump*

相同的文件列表将传递给ls,它将打印有关它们的信息。

请记住it is not recommended to attempt to parse the output of ls