2011-12-18 6 views
0

4k +のWebページでいくつかのガベージjsコードを削除しようとしています。ウェブページにはページ上に他のjもあるので、clickIEという特定の機能を持つJSを取り除くだけでいいです。perl regex find&replace

私は正規表現を導入するまで、私はこの1つのライナーが動作してい...

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

私の正規表現は、正規表現...意味が失敗した(... http://www.gskinner.com/RegExr/で試験した場合に正しく動作しますが、コマンドラインに失敗します

+0

なぜレイジーマッチングの代わりに欲張りを使用していますか? *具体的には「失敗する」という意味ですか? –

+0

@ MarkByersあなたの提案はそれを強化しました。ありがとう。私がhttp://www.gskinner.com/RegExr/でテストしたときにうまく動作します。私がコマンドラインからそれを実行するとき、それは置換を行いません。 'perl -p -i -e 's | 。*?clickie。*? <\/script> | <\! - REMOVED-JS-CODE - > | gixsm './*。html' – jriddle

+0

これは ''に移動します。確かに、あなたが見ているソースのどこでもクッキーで「clickie」を見つけることはほとんどありませんが、一般的ではない可能性があります。 これを安全に修正するには、javascriptパーサーを使用して、ターゲット文字列が関数名として使用されている場合のみを検索することが必要です。これはやや難しい問題です。 –

答えて

3

正規表現を動作させるには、ファイル全体を一度にスラーピングする必要があります。

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

+1もう一度私を沸かして、正確な解決策を提案した。しかし、フラグを保持する必要があるかもしれません。 – TLP

+0

これで解決しました!ありがとう – jriddle

+0

@TLP:もう一つの方法があります;) – Zaid

0

@マークによって示されるように、マッチは非貪欲でなければなりません。これはうまくいくようです...

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