2016-05-04 13 views
2

は、私は次のコマンドでdirはディレクトリ内のファイルに NotEmpty.txtすべての私の非空のテキストファイルを書き込みますその行の情報どのように可能ですか?一致する正規表現だけをgrepするには?</p> <pre><code>find dir/ -not -empty -ls | grep -E "*.txt" > NotEmpty.txt </code></pre> <p>私は唯一のマッチング正規表現ではなく、すべてを印刷したいと思います:

+0

だから、 'ディレクトリ/ファイル名.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 @正規表現 – bam500

+1

でそれを可能にするためにどのように思ったんだけど - それは確かに-Eで動作ありません。正規表現が不正であるため( '* .txt'は正規表現ではなく大域表現であるため)正しい結果を得られない可能性があります。あなたは '。* \。txt'を正規表現に使う必要があります。 –

+0

あなたは正しいです!少しの説明をありがとうございます。私は正規表現とそれらを使用する方法についての詳細を読む必要があります! – bam500

関連する問題