回答:
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 directory
Ubuntu 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)" /dir
500Gbの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-extended
find
どんな正規表現を期待するかを伝えます-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
オプションとして取得)。...最もエレガントな方法から遠い。私が言ったように、私の意図は可能性の範囲を広げることです(そしてあなたが使うことができるいくつかのツールについてより完全な説明を与えることも)。