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
作为可选)。
…远离最优雅的方式。 正如我所说,我的意图是增加可能性的范围(也可以给你可以使用的一些工具更完整的解释)。