• ベストアンサー

grep で複数条件を指定

条件Aに当てはまって且つ条件Bに当てはまらないものの件数を表示したいのですが $ grep -c "条件A" ファイル名 | grep -v "条件B" としても条件Bが除外されないままの件数しか出てきません。 どのように記述すればいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ts3m-ickw
  • ベストアンサー率43% (1248/2897)
回答No.3

んじゃ $ grep "条件A" ファイル名 | grep -v -c "条件B"

ok_seed
質問者

お礼

回答ありがとうございます。 条件B側に-cを付ければよかったのですね。 全然その発想にいたれませんでした--; 動作確認できました!!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ts3m-ickw
  • ベストアンサー率43% (1248/2897)
回答No.2

パイプラインの動作を理解されていないようですね。 条件Bが -c(一致行数)の出力結果にしかかからないからです。 $ grep "条件A" ファイル名 | grep -v "条件B" | wc -l

ok_seed
質問者

お礼

回答ありがとうございます。 >条件Bが -c(一致行数)の出力結果にしかかからないからです。 やっぱりそうですよね。 >$ grep "条件A" ファイル名 | grep -v "条件B" | wc -l 私もこれに行きついた所なのですがgrepコマンドだけで書く方法ってあるでしょうか? 拘ってるわけではないんですが grep -c で件数が出せるならどうにか方法があるんじゃないかと思いまして^^; grep -c ファイル名(grep 条件A -v 条件B) こんな書き方が無いのはわかってるんですがイメージはこのような感じです。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

なぜなのか, 理由は理解できていますか?

ok_seed
質問者

お礼

条件B側に-cをつけることで実現できることがわかりました! ありがとうございました♪

ok_seed
質問者

補足

一つ目のgrepで件数出しているのにそれにgrep -vで除外しようとしてしまうからだと認識しています。 >$ grep "条件A" ファイル名 | grep -v "条件B" | wc -l で求めたい結果が出てくるのはわかったんですがgrepとwcコマンドを組み合わせるのではなくgrepコマンドだけでそもそも出来ないのだろうかと思いまして・・ $ grep "条件A" ファイル名 | grep -v "条件B" をgrepの-cで件数出す方法ってないのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A