- 締切済み
連続で複数の単語をGREPしたい
Windows7端末でサクラエディタを用いてGrepしていますが、Grepしたい単語数が多いので困っています。イメージとしては以下のようにできれば良いと考えています。 ・検索したい単語のリスト C:\単語リスト.txt ・結果を出力するファイル C:\結果テキスト.txt(結果ファイルは単語ごとに出力しても可能) ・検索対象フォルダ(サブフォルダも検索) C:\SourceCode\ 単語リストから一行ずつ取得して検索対象フォルダから該当のファイル名と該当行を結果テキスト.txtに出力します。結果は一つのファイルにまとめて出す場合は、単語ごとにGrepした結果を分けて出力したいです。 もしくは単語単位に複数の結果テキスト.txtを出力しても構いません。 方法ご存知のかた教えて頂ければ幸いです。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- trapezium
- ベストアンサー率62% (276/442)
> ちなみに、SourceCodeではなく指定されたフォルダ以下全てを検索したい場合はどうすればよいのでしょうか。 文字通りなら SourceCode を別のディレクトリに読み換えてくれればいい。じゃなく全然検索してくれないなら SourceCode\* と明示的にワイルドカード指定しないといけなかったかもしれない。(いま Windows 環境じゃないから試せない。dir /S とは動作違ったかも) そのへんの詳しい挙動は msdn あたりで検索するか help findstr or findstr /? grep なら man grep and/or grep --help etc で確認してくれ
- trapezium
- ベストアンサー率62% (276/442)
> Windowsでも同じようにできますでしょうか? cygwin は所謂 Linux のユーザランド互換ですし、まあそれなりに。 > どのコマンドを使ったらよいか分かりません。 cygwin やフリーソフト等のインストールが可能で、その権限もあるならそれをインストールして grep 使うのもありですし、それが不可能な環境なら findstr (正規表現使わないなら find でも) 使うことになるでしょう。 オプションとか自信ないですが findstr の場合書いておくと for /F "delims=" %i in (単語リスト.txt) do findstr /S /N /R /C:"%i" SourceCode >> 結果テキスト.txt 特殊記号含む検索ワードだと上手く動かないこともある
- trapezium
- ベストアンサー率62% (276/442)
cygwin というか Unix 的には for か while で while read i; do grep -Rn "$i" SourceCode; done < 単語リスト.txt > 結果テキスト.txt 分ける必要なければ単に grep -Rn -f 単語リスト.txt SourceCode > 結果テキスト.txt cygwin 無関係な grep とか findstr で我慢するなら cmd の for 使えということですね
補足
Windowsでも同じようにできますでしょうか? どのコマンドを使ったらよいか分かりません。
- Tacosan
- ベストアンサー率23% (3656/15482)
「Windows7端末」で動く grep を使って for でループ.
補足
もう少しに詳しく教えてくれると助かります。
補足
ご回答有難うございます。ちなみに、SourceCodeではなく指定されたフォルダ以下全てを検索したい場合はどうすればよいのでしょうか。 >for /F "delims=" %i in (単語リスト.txt) do findstr /S /N /R /C:"%i" SourceCode >> 結果テキスト.txt