回答:
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
rフラグが(サブディレクトリを検索)を再帰的に検索することを意味します。iフラグは、ケース非感受性を意味します。
ファイル名だけが必要な場合は、l(小文字のL)フラグを追加します。
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
grep -E ... >egrep ...
grep: (error|fail): No such file or directoryUbuntu Desktop 16でエラーが発生しました。ヒントはありますか?
--include=\*.{php,html,js}
のようなものを試してください grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
-iその場合のinsensitlveを作ります
.あなたは、現在のディレクトリから開始したいエンド手段で、これは任意のディレクトリで置換することができます。
-r手段は、右のディレクトリツリーの下、再帰的にこれを行います
は-n、一致する行番号を出力します。
これ--includeにより、ファイル名、拡張子を追加できます。ワイルドカードを受け入れ
-l代わりにオプションを使用します(一致するファイル名を出力するだけ)-n
findそれらとgrep文字列:
これにより、3つのタイプのすべてのファイルが/ starting / pathおよび正規表現のgrepに見つかります'(document\.cookie|setcookie)'。読みやすくするために、バックスラッシュで2行に分割します...
find /starting/path -type f -name "*.php" -o -name "*.html" -o -name "*.js" | \
xargs egrep -i '(document\.cookie|setcookie)'
-exec grep -l 'sth' {} \;
# egrep -ir --include=file.foo "(foo|bar)" /dir500Gbのweigthディレクトリで5または8倍以上の速さで高速になります。
完璧な仕事のように聞こえるためgrepか、おそらくACK
またはこの素晴らしい構造:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
-exec grep...はxargs、ファイル名のスペースを詰まらせないため、私の方法よりも優れています。
find . -type f -print0 | xargs -0 -I {} grep "search_string" {}。もちろん、他のオプションも追加できます。
もう1つの代替を含めるために、これを使用することもできます。
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \;
どこ:
-regextype posix-extendedfindどんな正規表現を期待するかを伝えます-regex "^.*\.(php|html|js)$"find正規表現自体にファイル名が一致する必要があることを伝えます-exec grep -EH '(document\.cookie|setcookie)' {} \;伝えfind間で指定された(そのオプションと引数を指定して)コマンドを実行する-execオプションと\;、見つかった各ファイルの、{}ファイル・パスは、このコマンドでどこに行くかを表します。
ながら
Eオプションはgrep、(括弧をサポートするために)拡張正規表現を使用するように指示し、...Hオプションはgrep、一致する前にファイルパスを出力するように指示します。そして、これを前提として、ファイルパスのみが必要な場合は、以下を使用できます。
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \; | sed -r 's/(^.*):.*$/\1/' | sort -u
どこ
|[パイプ]の出力をfindこの後の次のコマンドに送信します(つまりsed、次にsort)rオプションはsed、拡張正規表現を使用するように指示します。s/HI/BYE/sed「HI」のすべての最初の出現(行ごと)を「BYE」に置き換えるように指示します...s/(^.*):.*$/\1/正規表現を置き換えるために、それを伝える(^.*):.*$意味(グループ [で囲まれたもの()を含む] すべて [ .*からのより多くの任意の文字の= 1または] 行の先頭に [ ^]までの「最初の『:』に続くものまで」の終わり行 [ $])最初のグループ [\1置換された正規表現の ]によって。u重複するエントリを削除するようにsortに指示します(sort -uオプションとして取得)。...最もエレガントな方法から遠い。私が言ったように、私の意図は可能性の範囲を広げることです(そしてあなたが使うことができるいくつかのツールについてより完全な説明を与えることも)。