मैं एक स्ट्रिंग में एक चरित्र के अंतिम घटना को सीड का उपयोग करके कैसे बदल सकता हूं?


31

मैं एक स्ट्रिंग में "-" की केवल अंतिम घटना को कैसे उपयोग sedकरूं?

उदाहरण के लिए:

echo $MASTER_DISK_RELEASE
swp-RedHat-Linux-OS-5.5.0.0-03

लेकिन मैं निम्न आउटपुट (अंतिम हाइफ़न को बदलना चाहता हूं [- "-"] एक स्थान के साथ)

swp-RedHat-Linux-OS-5.5.0.0 03

जवाबों:


48

आप इसे एकल के साथ कर सकते हैं sed:

sed 's/\(.*\)-/\1 /'

या, विस्तारित नियमित अभिव्यक्ति का उपयोग कर:

sed -r 's/(.*)-/\1 /'

मुद्दा यह है कि sedबहुत लालची है, इसलिए -जितना संभव हो उतने पात्रों से मेल खाता है, जिसमें अन्य शामिल हैं -

$ echo 'swp-RedHat-Linux-OS-5.5.0.0-03' | sed 's/\(.*\)-/\1 /'
swp-RedHat-Linux-OS-5.5.0.0 03

2
ध्यान दें, यह पोर्टेबल नहीं है। कुछ गैर-जीएनयू संस्करण sedपैटर्न मैचों का समर्थन नहीं करते हैं। उस स्थिति में, आपको कुछ और की आवश्यकता होगी, यह होना चाहिए perl -pne 's/(.*)-/$1 /'या @ थोर के पैरामीटर विस्तार समाधान या कुछ और।
एडम काट्ज

बेशक :-) thx ...
ग्रेग

एकल कोट्स का उपयोग करते समय आपको उन कोष्ठकों से बचने की आवश्यकता नहीं होनी चाहिए।
jgmjgm

@jgmjgm आप के साथ विस्तारित नियमित अभिव्यक्ति का उपयोग करके बैकस्लैश को छोड़ सकते हैं sed -r
जिमीज

1
@VinayPotluri कोशिश करें sed -r 's/(.*)-(.*)-/\1 \2 /')
जिमीज


11

मेरे लिए कुछ इस तरह से काम किया, हालांकि मुझे यकीन है कि बेहतर तरीके हैं

echo "swp-RedHat-Linux-OS-5.5.0.0-03" | rev | sed 's/-/ /' | rev
swp-RedHat-Linux-OS-5.5.0.0 03

यह बुरा है ... सादा बुरा। जब आप 2 कर सकते हैं तो 4 ऑपरेशन क्यों करें?
जोशपब्रॉन

7
केवल नियमित अभिव्यक्तियों की बुनियादी समझ रखने वाले किसी व्यक्ति के लिए, यह उत्तर बहुत अधिक स्वीकार्य है। और कौन परवाह करता है कि यह कितने ऑपरेशन लेता है, यह सभी व्यावहारिक मामलों के लिए तात्कालिक होने जा रहा है। इसलिए मैं यथासंभव कुछ कार्यों का उपयोग करने के लिए कुछ मनमाने नियम पर पठनीयता पर विचार करूंगा।
साइरस

5
@Psirus मुझे आशा है कि इस कीड़े की एक कर सकते हैं खोलने के लिए नहीं जा रहा है, लेकिन कम आपरेशन प्रयोग का विचार का एक निश्चित स्तर का प्रदर्शन करने के है महारत के कम संचालन। उदाहरण के लिए, @ थोर का उत्तर bashपैरामीटर विस्तार सुविधा की सराहना करता है, जो अच्छी तरह से काम करता है अगर ओपी bashभी उपयोग कर रहा है। पठनीयता (बहुत क्रिया होने के बिंदु तक) और सही साधनों का उपयोग करने के बीच एक नाजुक संतुलन होने जा रहा है, लेकिन अधिक बार सही साधनों का उपयोग नहीं करने से प्रबल होता है।
hjk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.