2014-06-16 49 views
0

我想寫一個shell腳本,其中我有一個文件的文件名列表中的文件。現在我想grep如果它存在於該文件中的模式。這裏是例子。如何在另一種模式內grep的特定模式

文件名:Check.txt

YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 
YYY5125741025CCCxxxxxxxxxxxxxxxxxxxxxx_002_05977_20140616.dat 

現在我想給grep的文件Check.txt內這種格局 「28590301456967003510KKKxxxxxxxxxxxxxxx_001_00051.dat」。請注意,我只關注針對該特定文件模式的模式28590301456967003510KKK和序列。因爲我將有多個文件來檢查如何循環。謝謝你的幫助。

+0

無論何時您在shell中編寫循環來解析文本文件,您都有錯誤的方法。這聽起來像你只需要一個簡單的'grep'命令(請參閱@ AvinashRaj的答案),但如果您的要求比您告訴我們的還多,那麼您就可以使用'awk'。無論哪種情況,您都不會編寫shell循環。 –

回答

3

運行它包含所有在您嘗試搜索文件的目錄裏面這個命令,

grep '28590301456967003510KKK.*00051' *.txt 

例子:

$ cat foo.txt 
YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 
YYY5125741025CCCxxxxxxxxxxxxxxxxxxxxxx_002_05977_20140616.dat 

$ cat bar.txt 
YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 
YYY5125741025CCCxxxxxxxxxxxxxxxxxxxxxx_002_05977_20140616.dat 
foo 
bar 

$ grep '28590301456967003510KKK.*00051' *.txt 
foo.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 
bar.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 

如果你想裏面的文件搜索模式哪些存在於子目錄中,你可以試試這個命令

$ find . -mindepth 1 -type f -name "*.txt" | xargs grep '28590301456967003510KKK.*00051' 
./foo.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 
./foo-bar/aa.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 

它找到文件及其路徑以及與該模式匹配的文本。

OR

,你可以使用grep也對內部子目錄中的文件進行搜索,

$ grep -R --include="*.txt" '28590301456967003510KKK.*00051' . 
./aa1.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 
./foo-bar/ram.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 

-R - >遞歸

--include="*.txt" - >僅.txt文件

'28590301456967003510KKK.*00051' - >模式

. - >當前目錄(從目錄grep操作將要發生)。

+0

嗨,如果它實際上是一個循環,那麼我該怎麼做。?個別地,它是好的:) – user2647888

+0

你的意思是如果文件在子目錄內? –

+0

嗨,我認爲這裏有一點點困惑。我所有的文件名都在特定的文件中,我只想在特定文件中搜索模式,而不是在任何目錄中搜索模式。 – user2647888