- ベストアンサー
ファイルの中の文字を検索してパスとファイル名と行を調べたいのですが
現ディレクトリからどこかにある(カレントディレクトリもしくは下の階層)ファイルの中の文字を探して、パスとファイル名と行番号を表示させるにはどうすればいいのでしょうか (例)例 現Cドライブ→下のフォルダ→下のフォルダ→下のフォルダ→xxx.txtの中に含まれる文字 abc(10行目)を探したい 結果 c/フォルダ/フォルダ/フォルダ/xxx.txt 10行目 findとgrepでなんとかできそうな気がするのですが どなたかわかる方教えてください
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2 です。 > では *.txtは どの位置に挿入すればいいのでしょうか(txtファイルから検索する場合) findでファイル名を限定する場合は find . -name "*.txt" -print -exec ... のようにします。 (「*」のようなワイルドカードを含む場合は、 「"」や「'」で囲みます)
その他の回答 (3)
- e_watt
- ベストアンサー率71% (25/35)
No.3 の参考URLは長すぎて切れてしまいました。失礼しました。 「検索すると、もっと詳しい使い方を説明しているサイトがあります」 という程度の意味です。 # googleで、検索語に[find -name -exec] のように書いてしまうと、'-'(マイナス記号)のせいで # name や exec を 含まない(!) ページという指示になってしまうので、 # これらは「"」で囲んで[find "-name" "-exec"]と入力して # 検索してください。
- e_watt
- ベストアンサー率71% (25/35)
使っている grep で、以下のオプションがサポートされていれば... (man がインストールされていれば、man grep で確認; Cygwinではすべてサポートされているようです) $ grep -r -H -n abc * -r, -R, --recursive; または -d recurse : 階層をたどる -H または --with-filename : パス名を表示 -n または --line-number : 行番号を表示 -n くらいしかサポートされてなくて find を使うなら、(パス名は各行には出ないけど) $ find . -print -exec grep -n abc {} \; てな感じでしょうか。
補足
grep -r -H -n abc *で問題解決できました。 $ find . -print -exec grep -n abc {} \; では *.txtは どの位置に挿入すればいいのでしょうか(txtファイルから検索する場合)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
findstr /s /n "abc" c:\*.txt
お礼
有難うございました
補足
DOS だとこの方法が 使えるのですね ありがとうございます
お礼
色々やってみたところ find -iname '*.txt' -exec grep -Hn --colour 'abc' {} \; で 思っていた結果が出せませた。 大変役に立つコマンドだと思います。 ありがとうございました。