2011-12-18 279 views
0

我想在4k +網頁上刪除一些垃圾js代碼。網頁上也有其他的js,所以我只需要用一個叫做clickIE的特定函數來擺脫JS。perl正則表達式查找和替換

我有這樣的一個班輪工作,直到我介紹了正則表達式......當http://www.gskinner.com/RegExr/測試,但沒有在命令行上

perl -p -i -e 's|<script(.*)>.*clickie.*?<\/script>|<\!--REMOVED-JS-CODE-->|gixsm' ./*.html 

我正則表達式正常工作......(失敗的意義......正則表達式不匹配任何東西)

+0

爲什麼你用貪婪而不是懶惰匹配?什麼*具體*你的意思是「失敗」? – 2011-12-18 07:47:34

+0

@MarkByers你的建議收緊了它。謝謝。當我在http://www.gskinner.com/RegExr/進行測試時,它的工作情況很好。當我從命令行運行它時,它不會執行替換。 'perl -p -i -e's | 。*?clickie。*? <\/script> | <\! - REMOVED-JS-CODE - > | gixsm'./*。html' – jriddle 2011-12-18 08:05:54

+0

這次旅行超過''。無可否認,你不可能在你看到的資料來源的任何地方在引用中找到'clickie',但在一般情況下可能不太可能。 解決這個安全問題涉及到使用JavaScript解析器僅查找目標字符串被用作函數名稱的情況,這是一個有點難度的問題。 – 2011-12-19 11:03:16

回答

3

要使正則表達式工作,整個文件需要立即sl。。

$ perl -0777 -pi -e 's/your/regex/gix' ./*.html 
+0

+1我再次用1分鐘挫傷了我,並提出了我正在建議的確切解決方案。 = P您可能需要保留標誌。 – TLP 2011-12-18 08:08:51

+0

這解決了它!謝謝 – jriddle 2011-12-18 08:11:54

+0

@TLP:總有一種方法可以做到這一點;) – Zaid 2011-12-18 08:22:28

0

正如@Mark所指出的,匹配應該是非貪婪的。這似乎工作...

perl -i -p -e 's|<script.*?>.*?clickie.*?</script>|<!-- removed -->|gism'