查找包含给定文本的文件

时间:2011-05-27 13:50:29

标签: bash find

在bash中我想为包含不区分大小写的字符串.php|.html|.js的每个"document.cookie" | "setcookie"类型的文件返回文件名(以及文件的路径)

我该怎么做?

6 个答案:

答案 0 :(得分:193)

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

如果您只想要文件名,请添加l(小写L)标记:

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

答案 1 :(得分:45)

尝试grep -r -n -i --include="*.html *.php *.js" searchstrinhere .

之类的内容

-i使其不区分

最后的.表示您想从当前目录开始,这可以用任何目录替换。

-r表示在目录树

下递归执行此操作

-n打印匹配的行号。

--include允许您添加文件名,扩展名。接受通配符

有关详细信息,请参阅:http://www.gnu.org/software/grep/

答案 2 :(得分:14)

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

答案 3 :(得分:9)

对于grepack

来说,这听起来很完美

或者这个精彩的建筑:

find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;

答案 4 :(得分:4)

find . -type f -name '*php' -o -name '*js' -o -name '*html' |\
xargs grep -liE 'document\.cookie|setcookie'

答案 5 :(得分:3)

只是要包含一个替代方案,您也可以使用它:

sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local

其中:

  • 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 [pipe]将|的输出发送到此后的下一个命令(find,然后sed
  • sort选项告诉r使用扩展正则表达式。
  • sed告诉s/HI/BYE/更换" HI"的每一个第一次出现(每行)用" BYE"和...
  • sed告诉它替换正则表达式s/(^.*):.*$/\1/(意为 [(^.*):.*$所包含的内容],包括所有内容 [ () =来自行开头 [.*]的任意字符中的一个或多个,直到'第一个':'关注第一个 [^]通过任何直到行的结尾 [$])被取代的正则表达式。
  • \1告诉sort删除重复的条目(将u作为可选项。)

...从最优雅的方式来看FAR。正如我所说,我的目的是增加可能性的范围(并且对你可以使用的一些工具提供更完整的解释)。