2016-05-04 28 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