2016-09-05 8 views
2

a.txtというファイルが100行あります。wcへの2つのgrepコマンドのパイプ

grep rake a.txt | wc #returns 10 lines 

grep -v rake a.txt | wc #returns 90 lines 

grep Rake a.txt | wc #returns 3 lines 

これらの100行の一つは両方を持っているが、私はのみ「熊手」と行をしたいです。私は試みたgrep Rake a.txt | grep -v rake a.txt | wc 90行を返しますか?

3行すべてを 'Rake'で検索したい場合はgrepにパイプし、3行に 'Rake'は含まれていて 'rake'はない場合はwcを使用して行を数えます。私はリダイレクトを使って別のファイルを作成してからgrep -vその新しいファイルを作ることができましたが、それは本当に私の目標です。私はそれが単純なものだと確信していますが、私はどのように私の命令を修正するのですか?

+0

ここでは、サンプル入力と期待される出力が役立ちます。 –

答えて

2

私は試しましたgrep Rake a.txt | grep -v rake a.txt | wcは90行を返しますか?

配管のポイントは、コマンドの出力が次のものを供給することです。代わりに、配管して、grep -v rake a.txtと言って、以前のコマンドを不要にします。

だから、普通にパイプする必要があります。

grep Rake a.txt | grep -v rake | wc 
#       ^
#        removed a.txt 

ます。またawkを使用して熊手、ない熊手を含む行をカウントし、それを伝えることができます。最後に、カウンターを印刷します。

awk '/Rake/ && !/rake/ {count++} END {print count+0}' a.txt 
+0

awkの使い方を調べる必要があります。私は端末の使用に非常に慣れていて、現在いくつかのオンラインリソースを通して基本を学んでいます。しかし、答えをありがとう! – Aaron

+0

@Aaronあなたは大歓迎です:) UNIX世界へようこそ。多くの興味深いものを発見できましたか? – fedorqui

+1

wcへの配管の代わりにgrep -cを使用してみませんか? – VM17

2

すなわち、第二grepにファイル引数を与えないでください。:

grep Rake a.txt | grep -v rake | wc -l 

をファイル引数を指定すると、grepは再度ファイルを検索します。それがなければ、入力をフィルタリングするだけです。

+0

これは知ってうれしいです。私が現在使っているオンラインレッスンでは、grep&pipingを導入するときにこの楽しい事実を除外しました – Aaron

関連する問題