2015-05-22 6 views
5

से पहले लाइनों सम्मिलित करने के लिए मैं नीचे दी गई जानकारी के साथ फ़ाइल हैकमान पहला मैच

testing 
testing 
testing 

मैं एसईडी या किसी linux आदेश का उपयोग

जरूरत के लिए एक शब्द (परीक्षण किया) पहले परीक्षण शब्द से पहले सम्मिलित करना चाहते हैं यह आप के लिए काम कर सकते हैं की तरह

tested 
testing 
testing 
testing 

धन्यवाद

+1

@ mklement0: हाँ मैं इसे बाद में देखा था। मुझे लगता है कि यही कारण है कि मैंने 4 बजे प्रश्न नहीं पढ़े हैं :)। मेरी गलती। धन्यवाद! –

उत्तर

4

वास्तव में:

sed '0,/testing/s/testing/tested\n&/' file 

युक्त लाइनों के लिए "परीक्षण":

sed '0,/.*testing.*/s/.*testing.*/tested\n&/' file 

"परीक्षण"

sed '0,/^testing.*/s/^testing.*/tested\n&/' file 

फो के साथ शुरू लाइनों के लिए आर लाइनों "परीक्षण" के साथ समाप्त:

sed '0,/.*testing$/s/.*testing$/tested\n&/' file 

परिणाम के साथ फ़ाइल की सामग्री को अद्यतन करने के जोड़ने "मैं", उदाहरण:

sed -i '0,/testing/s/testing/tested\n&/' file 
6

उत्पादन (जीएनयू sed) हो:

sed -e '/testing/{itested' -e ':a;n;ba}' file 

testing के पहले मैच से पहले सम्मिलित tested और फिर एक पाश का उपयोग फ़ाइल के शेष पढ़ने/प्रिंट करने के लिए।

या जीएनयू विशिष्ट का उपयोग करें:

sed '0,/testing/itested' file 
5

एक awk आधारित विकल्प आसान है कि समझने के लिए प्रदान करने के लिए:

awk '!found && /testing/ { print "tested"; found=1 } 1' file 
  • found का ट्रैक रखने के लिए किया जाता है कि क्या पहले उदाहरण testing पाया गया है (परिवर्तनीय found, किसी भी Awk चर के रूप में, 0 पर डिफ़ॉल्ट, यानी,एक बुलीयन संदर्भ में)।
  • /testing/ इसलिए testing युक्त पहले पंक्ति से मेल खाती है, और जुड़े ब्लॉक संसाधित करता है:
    • { print "tested"; found=1 } प्रिंट इच्छित पाठ और झंडा पहले testing लाइन पाया गया है कि
  • 1 एक है सेट { print } के लिए सामान्य शॉर्टेंड, यानी, वर्तमान इनपुट लाइन को बस प्रिंट करना है।
संबंधित मुद्दे