• ベストアンサー

findコマンドについて

unix コマンドについて質問です。 ファイル1の中に"A=1" ," B=2", "C=3"という文字列が入っているとします。 ファイル2の中に"D=1" , "E=2", "F=3"という文字列が入っているとします。 そのことを自分は知りません。 Aという文字が入っているファイルを探す為、 以下のfindコマンドを打ち、ファイル1のlsの結果が表示されました。 find ./ -type f -exec grep 'A' {} \; -ls その後、出力されたファイル1の中からBとCでgrepしてB=2", "C=3"を表示したいと思います。 上のコマンドと併せて一度でできるコマンドを教えていただけないでしょうか? 宜しくお願いします。

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

  • ベストアンサー
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.2

xargsで繋いでもいけるような気がします。 find ./ -type f -exec grep -q 'A' {} \; -print | xargs grep \[BC\] 見たいな具合に。 ファイル名も欲しければ、 find ./ -type f -exec grep -q 'A' {} \; -print | xargs grep \[BC\] /dev/null かな。

weboflife
質問者

お礼

回答ありがとうございます。 こういう風にコマンドを繋ぐのですね。 大変参考になりました。

その他の回答 (1)

回答No.1

あまり悩まずに素直にコマンド作った方が早いと思います。 要件がよく理解できないのですが「文字列Aを含むファイルにて文字列Bと文字列Cのgrep結果を得る」と解釈します。 以下のようなスクリプトを作成します。(便宜上、aresgrepとでもしましょう) # find ./ -type f -exec grep -q $1 {} \; -fprintf /tmp/aaa$$ "grep $2 %p\n" sh /tmp/aaa$$ rm -f /tmp/aaa$$ # で、次のように実行できるはずです。 aresgrep A B aresgrep A C もし要件が違ってましたら、上記スクリプトの修正で対応できると思いますがいかがでしょうか?

weboflife
質問者

お礼

回答ありがとうございます。 参考にさせていただきます。

関連するQ&A