• 締切済み

grepの使い方

"A.lst"と"B.lst"の2つのファイルがあります。 ともにディレクトリ階層の一覧が記述されています。 2つのファイルを比較して、A.lstのディレクトリ階層の文字列を 含む行を、B.lstから抽出して、リダイレクトで出力するには、 どういうコマンド操作になるのでしょうか。 特定の文字列ならば単純に、cat B.lst | grep moziretsu > sample.lst でいいわけですが、この文字列がA.lstファイル内に複数行あり、 それを順にgrepするにはどうすればいいのかがわかりません。 シェルもただいま勉強中です。 よろしくご教授願います。

みんなの回答

  • maku_x
  • ベストアンサー率44% (164/371)
回答No.2

使用されているシェルが bash で、ディレクトリ階層の一覧に、空白が含まれていなければ、 for fdir in `cat B.lst`; do grep $fdir A.lst; done で可能です。 空白が含まれている場合はどうしましょうね。 for fdir in `cat B.lst | sed 's/^.*$/\"&1\"/'`; do grep $fdir A.lst; done では動きませんかね。

j0hnd0e
質問者

お礼

返信ありがとうございます。 空白は含まれていませんので、最初のシェルでいけると思います。 検証させていただきます。 ありがとうございました。

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

んー 勉強ついでに fgrep コマンドを調べてみる もしかしたら、 grep -F とかで fgrep 相当になるかも?

j0hnd0e
質問者

お礼

返信ありがとうございます。 なるほど、fgrep(grep -f)は、文字列パターンを ファイルから1行ずつ繰り回せるのですね。 テストしてみたいと思います。 ありがとうございました。