मानक के साथ sed
, आपको फ़ाइल से पढ़े गए पाठ में एक नई पंक्ति कभी नहीं दिखाई देगी । ऐसा इसलिए है क्योंकि sed
लाइन द्वारा लाइन पढ़ता है, और इसलिए वर्तमान लाइन के पाठ के अंत में कोई नई रेखा नहीं sed
है। दूसरे शब्दों में, sed
न्यूलाइन-सीमांकित डेटा को पढ़ता है, और सीमांकक एक sed
स्क्रिप्ट को देखने का हिस्सा नहीं है।
नियमित अभिव्यक्तियों का उपयोग कर लाइन के अंत में (या शुरुआत में, उपयोग करके ) लंगर डाला जा सकता है । एक पंक्ति के प्रारंभ / अंत में एक अभिव्यक्ति का एंकरिंग करना इसे वहां पर सटीक रूप से मेल खाने के लिए मजबूर करता है, और न केवल लाइन पर कहीं भी।$
^
यदि आप [A-Za-z]*
कुछ के साथ लाइन के अंत में पैटर्न से मेल खाते हुए कुछ को बदलना चाहते हैं , तो पैटर्न को इस तरह से एंकरिंग करें:
[A-Za-z]*$
... यह लाइन के अंत में और कहीं और मेल करने के लिए मजबूर करेगा।
हालाँकि, चूंकि कुछ[A-Za-z]*$
भी मेल नहीं खाता है (उदाहरण के लिए, हर पंक्ति के अंत में मौजूद खाली स्ट्रिंग ), आपको किसी चीज़ के मिलान को बाध्य करने की आवश्यकता है , उदाहरण के लिए निर्दिष्ट करके
[A-Za-z][A-Za-z]*$
या
[A-Za-z]\{1,\}$
तो, आपकी sed कमांड लाइन इस प्रकार होगी
$ sed 's/[A-Za-z]\{1,\}$/replace/' file.txt
मैंने -E
यहां स्विच का उपयोग नहीं किया क्योंकि इसकी आवश्यकता नहीं है। इसके साथ, आप लिख सकते थे
$ sed -E 's/[A-Za-z]+$/replace/' file.txt
यह स्वाद की बात है।