在bash中我想为包含不区分大小写的字符串.php|.html|.js
的每个"document.cookie" | "setcookie"
类型的文件返回文件名(以及文件的路径)
我该怎么做?
答案 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)
对于grep
或ack
或者这个精彩的建筑:
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。正如我所说,我的目的是增加可能性的范围(并且对你可以使用的一些工具提供更完整的解释)。