在 bash 中,我想为包含不区分大小写的字符串 "document.cookie" | "setcookie"的每个 .php|.html|.js类型的文件返回文件名(以及文件的路径)
"document.cookie" | "setcookie"
.php|.html|.js
我要怎么做?
听起来像是 grep或者 啊的完美工作
grep
或者这个奇妙的结构:
find . -type f \( -name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
试试 grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
-i使它对大小写不敏感
-i
最后的 .表示你想从你的工作目录开始,这可以用任何目录代替。
.
-r表示在目录树的下面递归地执行此操作
-r
-n打印匹配的行号。
-n
--include允许您添加文件名、扩展名。通配符接受
--include
更多信息见: http://www.gnu.org/software/grep/
它们和字符串的 grep:
这将在/start/path 和 grep 中找到正则表达式 '(document\.cookie|setcookie)'的所有3种类型的文件。为了便于阅读,用反斜杠分成两行..。
'(document\.cookie|setcookie)'
find /starting/path -type f -name "*.php" -o -name "*.html" -o -name "*.js" | \ xargs egrep -i '(document\.cookie|setcookie)'
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
r标志表示递归搜索(搜索子目录)。 i标志表示不区分大小写。
r
i
如果只想要文件名,请添加 l(小写 L)标志:
l
L
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
find . -type f -name '*php' -o -name '*js' -o -name '*html' |\ xargs grep -liE 'document\.cookie|setcookie'
只是为了包含更多的选择,你也可以使用这个:
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)$"
-exec grep -EH '(document\.cookie|setcookie)' {} \;告诉 find运行在 -exec选项和 \;之间为它找到的每个文件指定的命令(带有选项和参数) ,其中 {}表示文件路径在这个命令中的位置。
-exec grep -EH '(document\.cookie|setcookie)' {} \;
-exec
\;
{}
同时
并且,如果您只想要文件路径,您可以使用:
find "/starting/path" -type f -regextype posix-extended -regex "^.*\.(php|html|js)$" -exec grep -EH '(document\.cookie|setcookie)' {} \; | sed -r 's/(^.*):.*$/\1/' | sort -u
在哪里
|
sed
sort
s/HI/BYE/
s/(^.*):.*$/\1/
(^.*):.*$
.*
()
^
$
\1
u
sort -u
远不是最优雅的方式。正如我所说的,我的目的是增加可能性的范围(也是为了给出一些您可以使用的工具的更完整的解释)。