Sumary
GNU सिंटैक्स:
sed '/claudio/{s//claudia/;:p;n;bp}' file
या यहां तक कि (केवल एक बार उपयोग किए जाने वाले शब्द को बदलने के लिए:
sed '/\(claudi\)o/{s//\1a/;:p;n;bp}' file
या, POSIX सिंटैक्स में:
sed -e '/claudio/{s//claudia/;:p' -e 'n;bp' -e '}' file
किसी भी तलछट पर काम करता है, पहले खोजने के लिए जितनी लाइनें चाहिए उतनी ही प्रक्रिया claudioकरता है, भले ही काम करता होclaudio पहली पंक्ति में है और के रूप में यह केवल एक regex स्ट्रिंग का उपयोग कम है।
विस्तार
केवल एक पंक्ति को बदलने के लिए आपको केवल एक पंक्ति का चयन करना होगा ।
1,/claudio/(आपके प्रश्न से) चयन का उपयोग करना :
- पहली पंक्ति से (बिना शर्त)
- करने के लिए अगले लाइन है कि स्ट्रिंग है
claudio।
$ cat file
claudio 1
antonio 2
claudio 3
michele 4
$ sed -n '1,/claudio/{p}' file
claudio 1
antonio 2
claudio 3
किसी भी पंक्ति का चयन करने के लिए claudio, जिसमें उपयोग करें:
$ sed -n `/claudio/{p}` file
claudio 1
claudio 3
और फ़ाइल में केवल पहले का चयन करने के लिए claudio, उपयोग करें:
sed -n '/claudio/{p;q}' file
claudio 1
फिर, आप उस लाइन पर केवल एक प्रतिस्थापन कर सकते हैं:
sed '/claudio/{s/claudio/claudia/;q}' file
claudia 1
जो लाइन पर रेगेक्स मैच की केवल पहली घटना को बदल देगा , भले ही पहले पर एक से अधिक हो, लाइन ।
बेशक, /claudio/रेगेक्स को सरल बनाया जा सकता है:
$ sed '/claudio/{s//claudia/;q}' file
claudia 1
और, तब, केवल एक चीज गायब है अन्य सभी लाइनों को संयुक्त राष्ट्र में संशोधित करने के लिए:
sed '/claudio/{s//claudia/;:p;n;bp}' file
info sed: (0,/REGEXP/0 की एक पंक्ति संख्या का उपयोग पते के विनिर्देशन में किया जा सकता है,0,/REGEXP/ताकिsedपहले इनपुट लाइन में भी REGEXP से मेल खाने का प्रयास करें। दूसरे शब्दों में, अन्य शब्दों में0,/REGEXP/) के समान1,/REGEXP/है, सिवाय इसके कि अगर ADDR2 इनपुट 0 के पहले पंक्ति से मेल खाती, / regexp / प्रपत्र यह विचार करेंगे सीमा समाप्त करने के लिए है, जबकि 1, / regexp / प्रपत्र अपनी सीमा की शुरुआत से मेल खाते हैं और इसलिए सीमा अवधि कर देगा नियमित अभिव्यक्ति की दूसरी घटना तक)