2016-09-14 12 views
1

我有以下堆轉儲文件使用grep和*得到確切的文件名

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* 

我沒有輸出。任何人都可以幫助我的錯誤在哪裏以及如何搜索堆轉儲文件。

我的預期輸出是

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* 
+0

'*'由shell擴展爲第一個實例中的單個文件和第二個中的多個文件。在第二個實例中,您將搜索與所有其他文件匹配的第一個文件。引用'* headdump *'可能會給你想要的行爲。 – 123

+0

你要找的輸出是什麼?你能否[編輯]你的問題,使其更清楚? –

+0

我已編輯我的帖子。 –

回答

2

它看起來像你混淆glob模式與正則表達式,這是grep使用的。

打印包含單詞heapdump文件列表正確的方法是這樣的:

printf '%s\n' *heapdump* 

這裏,*heapdump*是水珠擴展由shell來匹配任何其次是「堆轉儲」,其次是其他任何。所有與該模式匹配的文件都被傳遞到printf,後者打印每個文件後跟一個換行符。

如果你想過濾的ls -ltr輸出,那麼你可以使用:

ls -ltr *heapdump* 

文件的同一列表將被傳遞給ls,這將打印有關它們的信息。

請記住,it is not recommended to attempt to parse the output of ls

+0

嗨,湯姆,謝謝你的回覆,你能否分享一些內容/鏈接,解釋爲什麼ls輸出不應該被解析,就像我通常做的那樣,並且如果它錯了,我將改正我的習慣。 –

+0

我的答案已經包含一個鏈接 - 搜索「解析ls」也將產生大量的結果。 –

+0

謝謝allot printf'%s \ n'* heapdump * 讓我的生活變得輕鬆 –