2014-02-21 12 views
1

我有一個目錄內的一些文件:複雜的分隔符的Linux grep命令

140221_alzproddbadm01.log 
140221_alzproddbadm02.log 
140221_alzproddbadm03.log 
132123_ehxsk01.log 
try.sh 
logs 
expan 
140221_alzproddbadm04.log 
23891_ehxsk02.log 

我只需要到grep這些:

140221_alzproddbadm04.log 
23891_ehxsk02.log 
140221_alzproddbadm01.log 
140221_alzproddbadm02.log 
140221_alzproddbadm03.log 
132123_ehxsk01.log 

格式並不複雜(numbers + _ + bla bla bla),但我不知道如何爲我的問題編寫正確的正則表達式。

ls -l | grep root | cut -d " " -f9 | grep #what to write next? 
+0

你可以通過* .LOG到LS再管了。 –

+0

下次可能有其他日誌文件。 – AloneInTheDark

回答

2

你可以這樣說:

$ grep -E '[0-9]*_[[:alpha:]]*.log' file 
140221_alzproddbadm01.log 
140221_alzproddbadm02.log 
140221_alzproddbadm03.log 
132123_ehxsk01.log 
140221_alzproddbadm04.log 
23891_ehxsk02.log 

甚至

ls -l [0-9]*_[a-z]*.log | grep root | ... 
+0

頂部是什麼「文件」字? – AloneInTheDark

+0

我把文件列表保存在'file'文件中,這樣我就可以在那裏'grep'。 – fedorqui

+0

謝謝。怎麼樣從另一個文件夾中挑選它們呢?當我顯示他們的特定文件夾,如「ls -l/tmp/network [0-9] ....」時,它顯示所有文件兩次。我該如何解決這個問題? – AloneInTheDark

1

爲什麼不只是適當通配符文件?例如

$ grep pattern *.log 

所以shell本身只會傳遞任何結尾'.log'到grep。請注意,這不是與grep專門做的,而是一個shell globbing function,因此適用於任何命令。

如果你有文件(/tmp/listOfFiles.txt),那麼也許的具體名單:

#!/bin/bash 
    while IFS= read -r file 
    do 
      grep pattern "$file" 
    done < /tmp/listOfFiles.txt 

更多信息,請參見here

+0

我沒有提到它的問題,但可能有其他日誌文件,我不想grep。 – AloneInTheDark

+0

那真是一種完全不同的情景 –

1

只需使用find命令:

find /path/to/dir -name "*\.log"