bash脚本 – 查找包含文本的文件

在bash中,我想为包含不区分大小写的string"document.cookie" | "setcookie"每个types为.php|.html|.js的文件返回文件名(和文件path) "document.cookie" | "setcookie"

我该怎么做?

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

如果你只是想要文件名添加l标志(小写字母L):

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

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

-i使得它不敏感

“。” 最后意味着你想从你的当前目录开始,这可以用任何目录来代替。

“-r”表示recursion地在目录树下执行此操作

“-n”打印匹配的行号。

“–include”可以让你添加文件名,扩展名。 接受通配符

欲了解更多信息,请访问: http : //www.gnu.org/software/grep/

find他们和grep的string:

这将在'(document\.cookie|setcookie)'expression式'(document\.cookie|setcookie)' / path和grep中的3种types的所有文件。 为了便于阅读,用反斜杠分割两行

 find /starting/path -type f -name "*.php" -o -name "*.html" -o -name "*.js" | \ xargs egrep -i '(document\.cookie|setcookie)' 

听起来像是一个完美的工作grep或者可能ack

或者这个美妙的build筑:

 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' 

只是包括一个替代scheme,你也可以使用这个:

find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \;

哪里:

  • -regextype posix-extended告诉find什么样的正则expression式期望
  • -regex "^.*\.(php|html|js)$" find正则expression式本身的文件名必须匹配
  • -exec grep -EH '(document\.cookie|setcookie)' {} \; 告诉find运行命令(及其选项和参数)在-exec选项和\;之间指定\; 对于每个find的文件,其中{}代表文件path在此命令中的位置。

    • E选项告诉grep使用扩展正则expression式(支持括号)和…
    • H选项告诉grep在匹配之前打印文件path。

而且,鉴于此,如果您只需要文件path,则可以使用:

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使用扩展正则expression式。
  • s/HI/BYE/通知sed用“BYE”replace“HI”的每一个第一次出现(每行)并且…
  • s/(^.*):.*$/\1/告诉它replace正则expression式(^.*):.*$ (表示一个 [包含在()东西()包括所有东西 [ .* =一个或多个任何字符]从开始行 [ ^ ]直到'第一个':'其次是任何东西,直到 [ $ ] 结束由被replace的正则expression式的第一 [ \1 ]。
  • u告诉sorting删除重复的条目( sort -u作为可选)。

…远离最优雅的方式。 正如我所说,我的意图是增加可能性的范围(也可以给你可以使用的一些工具更完整的解释)。