こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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"を表示したいと思います。
上のコマンドと併せて一度でできるコマンドを教えていただけないでしょうか?

宜しくお願いします。

投稿日時 - 2005-07-05 15:23:33

QNo.1493406

すぐに回答ほしいです

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

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
かな。

投稿日時 - 2005-07-05 17:11:37

お礼

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

投稿日時 - 2005-07-06 01:08:25

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

もし要件が違ってましたら、上記スクリプトの修正で対応できると思いますがいかがでしょうか?

投稿日時 - 2005-07-05 17:08:55

お礼

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

投稿日時 - 2005-07-06 01:03:36

あなたにオススメの質問