2016-05-04 63 views
2

我在文件中寫NotEmpty.txt我所有的非空的文本文件的目錄目錄用下面的命令:如何grep只匹配正則表達式?

find dir/ -not -empty -ls | grep -E "*.txt" > NotEmpty.txt 

我想只打印匹配正則表達式,而不是全部線上的信息。這怎麼可能?

+0

所以要打印像 'DIR/FILENAME.TXT' 唯一的東西? Btw * .txt將匹配整行:) –

回答

2

問題是你對每一個匹配都執行ls,所以輸出包含很多東西。而應使用此find命令來打印名稱。

注意,事實上,你可以在一次拍攝,包括選擇只.txt文件所做的一切:

find your_dir/ -not -empty -name "*.txt" -print > NotEmpty.txt 
#       ^^^^^^^^^^^^^ ^^^^^^ 
#         |   | 
#       just .txt files | 
#           | 
#        print its name instead of `ls`ing it 

你也可以說-type f只是檢查文件,該文件其實我想這是假設參數-not -empty

+1

謝謝,它的工作原理! – bam500

1

使用grep的-o參數指定您只需要匹配部分。

例子:

$ echo foo bar baz | grep -o "foo" 
foo 
+0

參數'-o'不適用於參數-E(對於正則表達式)。例如: 'echo foo.txt bar.txt baz.txt | grep的 - OE的 「* .txt」'給: '.TXT .TXT .txt' 我不知道如何使它能夠用正則表達式 – bam500

+1

@ bam500 - 它的確與-E工作。很可能你沒有得到正確的結果,因爲你的regex格式不正確('* .txt'是一個glob表達式,而不是正則表達式)。您需要使用'。* \。txt'作爲正則表達式。 –

+0

哦,你是對的!謝謝你的小解釋。我需要閱讀更多關於正則表達式以及如何使用它們! – bam500