2009-06-01 14 views
6

लूप मैं बस एक लॉगफ़ाइल में पढ़ा करना चाहते हैं, कोई खोज करते हैं और बदल सकते हैं और फिर उसी लॉगफ़ाइल में परिवर्तन लिखें।पर्ल: एक फ़ाइल के माध्यम से और स्थानापन्न

पर्ल में ऐसा करने का सबसे अच्छा अभ्यास तरीका क्या है?

उत्तर

9

मैं सामान्य रूप से इस के लिए एक एक लाइनर ऊपर कोड डाल दें:

perl -i -pe 's/some/thing/' log.file 

देखें Here

+0

लेकिन मैं बैकफेरेंस का उपयोग क्यों नहीं कर सकता? जैसा पर्ल -pi -e "s/foo (। *) बार/बार $ 1foo /" tezt2 काम नहीं करता है .. –

+2

आपका खोल शायद स्ट्रिंग को भ्रष्ट कर रहा है। अपने "एस को" के साथ बदलने का प्रयास करें ताकि * विस्तारित न हो। –

+0

धन्यवाद कि यह किया था! –

8

इस बार एक एक लाइनर के साथ किया जाता है:

perl -pi.bak -e "s/find/replace/g" <file> 

नोट -i.bak भाग - यह एक्सटेंशन .bak के साथ एक बैकअप फ़ाइल बनाता है। यदि आप एक शुद्ध बिना खेलने के लिए चाहते हैं, तो आप एक बैकअप के बिना मौजूदा फ़ाइल को अधिलेखित करने के लिए ऐसा कर सकते हैं:

perl -pi -e "s/find/replace/g" <file> 
1

या आप sed उपयोग कर सकते हैं (मुझे पता है ... आप पर्ल के बारे में पूछा):

sed -i 's/find/replace/g' <file> 
+0

जिस तरह से sed नियमित रूप से अभिव्यक्ति नियमों को नियंत्रित करता है ... कम से कम कहने के लिए पर्ल की तुलना में अलग है। – GJTorikian

संबंधित मुद्दे