Bashでは、大文字と小文字を区別しない文字列.php|.html|.js
を含む"document.cookie" | "setcookie"
タイプのすべてのファイルのファイル名(およびファイルへのパス)を返します。
どうすればいいですか?
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
r
フラグは、再帰的に検索することを意味します(サブディレクトリを検索)。 i
フラグは、大文字と小文字を区別しないことを意味します。
ファイル名だけが必要な場合は、l
(小文字のL
)フラグを追加します。
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
のようなものを試してください
-i
は大文字と小文字を区別しません
末尾の.
は、現在のディレクトリから開始することを意味します。これは任意のディレクトリで置き換えることができます。
-r
は、ディレクトリツリーのすぐ下でこれを再帰的に実行することを意味します
-n
は、一致する行番号を出力します。
--include
を使用すると、ファイル名、拡張子を追加できます。受け入れられるワイルドカード
詳細については、以下を参照してください。 http://www.gnu.org/software/grep/
find
それらと文字列のgrep
:
これにより、/ starting/pathにある3つのタイプのすべてのファイルと、正規表現'(document\.cookie|setcookie)'
のgrepが検索されます。読みやすくするために、バックスラッシュで2行に分割してください...
find /starting/path -type f -name "*.php" -o -name "*.html" -o -name "*.js" | \
xargs egrep -i '(document\.cookie|setcookie)'
grep
またはおそらく ack の完璧な仕事のように聞こえます
またはこの素晴らしい構造:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
find . -type f -name '*php' -o -name '*js' -o -name '*html' |\
xargs grep -liE 'document\.cookie|setcookie'
もう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/
は、正規表現(^.*):.*$
を置き換えるように指示します(group[()
で囲まれたもの]everything[.*
= 1つ以上の[文字] from行頭[^
] until '最初の': 'の後にanythingtill'が続く行末[$
])置換された正規表現の最初のgroup[\1
]によって。u
は、重複するエントリを削除するようソートに指示します(オプションとしてsort -u
を使用します)。...最もエレガントな方法であることから遠い。私が言ったように、私の意図は可能性の範囲を広げることです(そして、あなたが使うことができるいくつかのツールについてより完全な説明を与えることです)。