web-dev-qa-db-ja.com

特定のテキストを含むファイルを検索する

Bashでは、大文字と小文字を区別しない文字列.php|.html|.jsを含む"document.cookie" | "setcookie"タイプのすべてのファイルのファイル名(およびファイルへのパス)を返します。

どうすればいいですか?

142
Owen
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .

rフラグは、再帰的に検索することを意味します(サブディレクトリを検索)。 iフラグは、大文字と小文字を区別しないことを意味します。

ファイル名だけが必要な場合は、l(小文字のL)フラグを追加します。

egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
196
bear24rw

grep -r -n -i --include="*.html *.php *.js" searchstrinhere .のようなものを試してください

-iは大文字と小文字を区別しません

末尾の.は、現在のディレクトリから開始することを意味します。これは任意のディレクトリで置き換えることができます。

-rは、ディレクトリツリーのすぐ下でこれを再帰的に実行することを意味します

-nは、一致する行番号を出力します。

--includeを使用すると、ファイル名、拡張子を追加できます。受け入れられるワイルドカード

詳細については、以下を参照してください。 http://www.gnu.org/software/grep/

46
Raoul

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)'
14

grepまたはおそらく ack の完璧な仕事のように聞こえます

またはこの素晴らしい構造:

find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
9
Fredrik Pihl
find . -type f -name '*php' -o -name '*js' -o -name '*html' |\
xargs grep -liE 'document\.cookie|setcookie'
4
nos

もう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/は、正規表現(^.*):.*$を置き換えるように指示します(group[()で囲まれたもの]everything[.* = 1つ以上の[文字] from行頭[^] until '最初の': 'の後にanythingtill'が続く行末[$])置換された正規表現の最初のgroup[\1]によって。
  • uは、重複するエントリを削除するようソートに指示します(オプションとしてsort -uを使用します)。

...最もエレガントな方法であることから遠い。私が言ったように、私の意図は可能性の範囲を広げることです(そして、あなたが使うことができるいくつかのツールについてより完全な説明を与えることです)。

3
Pedro Vernetti