在bash我要爲含有不區分大小寫"document.cookie" | "setcookie"
bash腳本 - 找到文件,其中包含文本
我怎麼會做這種類型的.php|.html|.js
的每個文件返回文件名(和文件路徑)?
在bash我要爲含有不區分大小寫"document.cookie" | "setcookie"
bash腳本 - 找到文件,其中包含文本
我怎麼會做這種類型的.php|.html|.js
的每個文件返回文件名(和文件路徑)?
egrep -ir --include=*.{php,html,js} "(document.cookie|setcookie)" .
如果你只是想文件名添加了L位(小寫L):
egrep -lir --include=*.{php,html,js} "(document.cookie|setcookie)" .
第二個例子是完美的,我喜歡它的簡短。 – Owen 2011-05-27 15:08:31
這似乎並沒有爲我工作(至少不是在Mac上)....只是掛起... egrep -lir --include = *「回購」 egrep:警告:stdin的遞歸搜索 – 2014-04-02 14:18:47
你忘了添加搜索路徑。路徑是'。'在上面的例子中。在你的情況下,腳本正在等待輸入在stdin上搜索。嘗試:egrep -lir --include = *「repo」/(或任何其他路徑) – LodeRunner 2014-05-06 16:47:13
聽起來像是一個完美的工作爲grep
或許ack
或者這個奇妙的建築:
find . -type f \(-name *.php -o -name *.html -o -name *.js \) -exec grep "document.cookie\|setcookie" /dev/null {} \;
+1使用'-exec grep ...'比我的'xargs'方法更好,因爲它不會阻塞文件名中的空格。 – 2011-05-27 14:09:56
試着這麼做grep -r -n -i --include="*.html *.php *.js" searchstrinhere .
的-i使得情況insensitlve
的「」最後意味着你想從你當前的目錄開始,這可以用任何目錄代替。
的「-r」手段做到這一點遞歸,一直目錄樹
了「-n」打印匹配項的行號。
「--include」允許您添加文件名,擴展名。通配符接受
欲瞭解更多信息,請參閱:http://www.gnu.org/software/grep/
或者使用'-l'選項(只是打印匹配的文件名)而不是'-n' – 2011-05-27 14:03:48
@glenn jackman好點 – Raoul 2011-05-27 14:07:54
find
他們grep
的字符串:
這將在/啓動/路徑和grep的正則表達式'(document\.cookie|setcookie)'
你3種類型的所有文件。拆分爲兩行用反斜槓只是可讀性...
find /starting/path -type f -name "*.php" -o -name "*.html" -o -name "*.js" | \
xargs egrep -i '(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)$"
告訴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
凡
|
[管道]送find
輸出到這之後的下一個命令(這是sed
,然後sort
)r
選項告知sed
使用擴展正則表達式。s/HI/BYE/
告訴sed
替換每一次出現(每行)告訴它的「HI」與「BYE」和...s/(^.*):.*$/\1/
替換正則表達式(^.*):.*$
(意味着組 [由()
封閉東西]包括一切 [.*
=一個或多個任意的字符的來自該行的開頭 [^
]直到「第一‘:’隨後任何直到」線 [的端3210])被替換的正則表達式的第一個組 [\1
]。u
通知排序刪除重複條目(以sort -u
爲可選項)。...遠離最優雅的方式。正如我所說的,我的意圖是增加可能性的範圍(並且對你可以使用的一些工具給出更完整的解釋)。
你有沒有考慮過只使用grep? http://www.cyberciti.biz/faq/grep-in-bash/ – Terrance 2011-05-27 13:52:11