से अंतिम और पहला अक्षर स्ट्रिप करें awk
/sed
का उपयोग कर स्ट्रिंग से पहले और अंतिम वर्ण को पट्टी करना काफी आसान है?स्ट्रिंग
मैं इस स्ट्रिंग (1 2 3 4 5 6 7)
मैं इसे से कोष्ठक पट्टी करना चाहते हैं कहो।
मुझे यह कैसे करना चाहिए?
से अंतिम और पहला अक्षर स्ट्रिप करें awk
/sed
का उपयोग कर स्ट्रिंग से पहले और अंतिम वर्ण को पट्टी करना काफी आसान है?स्ट्रिंग
मैं इस स्ट्रिंग (1 2 3 4 5 6 7)
मैं इसे से कोष्ठक पट्टी करना चाहते हैं कहो।
मुझे यह कैसे करना चाहिए?
एसईडी रास्ता
$ echo '(1 2 3 4 5 6 7)' | sed 's/^.\(.*\).$/\1/'
1 2 3 4 5 6 7
awk रास्ता
$ echo '(1 2 3 4 5 6 7)' | awk '{print substr($0, 2, length($0) - 2)}'
1 2 3 4 5 6 7
POSIX श रास्ता
$ var='(1 2 3 4 5 6 7)'; var="${var#?}"; var="${var%?}"; echo "$var"
1 2 3 4 5 6 7
बैश रास्ता
$ var='(1 2 3 4 5 6 7)'; echo "${var:1: -1}"
1 2 3 4 5 6 7
यदि आप bash
का उपयोग करते हैं तो बैश मार्ग का उपयोग करें।
यदि नहीं, तो पॉज़िक्स-शू रास्ता पसंद करें। यह sed
या awk
लोड करने से तेज़ है।
इसके अलावा, आप अन्य टेक्स्ट प्रोसेसिंग भी कर सकते हैं, ताकि आप इसके साथ गठबंधन कर सकें, इसलिए शेष स्क्रिप्ट के आधार पर आप अंत में sed
या awk
का उपयोग करके लाभ उठा सकते हैं।
क्यों यह काम नहीं करता है?
sed '..' s_res.temp > s_res.temp
?
यह काम नहीं करता है, क्योंकि रीडायरेक्शन >
इसे पढ़ने से पहले फ़ाइल को छोटा कर देगा। इस हल करने के लिए आपको कुछ विकल्प हैं:
आप वास्तव में क्या करना चाहते हैं संपादित फ़ाइल है। sed
एक धारा संपादक एक फ़ाइल संपादक नहीं है।
ed
हालांकि, एक फ़ाइल संपादक (मानक भी है!) है। तो, ed
का उपयोग करें:
$ printf '%s\n' "%s/^.\(.*\).$/\1/" "." "wq" | ed s_res.temp
उपयोग अस्थायी फ़ाइल, और फिर mv
यह पुरानी की जगह।
$ sed 's/^.\(.*\).$/\1/' s_res.temp > s_res.temp.temp
$ mv s_res.temp.temp s_res.temp
उपयोग sed
की -i
विकल्प।यह केवल, के साथ जीएनयू-sed काम करता है के रूप में -i
POSIX नहीं है और GNU-केवल:
$ sed -i 's/^.\(.*\).$/\1/' s_res.temp
दुरुपयोग खोल (वास्तव में अनुशंसित नहीं):
$ (rm test; sed 's/XXX/printf/' > test) < test
मैक ओएस एक्स पर (नवीनतम संस्करण 10.12 - सिएरा) bash
संस्करण 3.2.57
पर अटक गया है जो काफी पुराना है। कोई भी bash
को brew
का उपयोग करके हमेशा स्थापित कर सकता है और संस्करण 4.x
प्राप्त कर सकता है जिसमें उपर्युक्त काम करने के लिए आवश्यक प्रतिस्थापन शामिल हैं।
बैश संस्करणों और संबंधित परिवर्तन का एक संग्रह, bash-hackers wiki
और यह भी पर संकलित एक पर्ल तरीका नहीं है:
perl -pe 's/^.|.$//g'
एक दिया स्ट्रिंग से पहले और अंतिम वर्ण निकालने के लिए, मुझे पसंद है इस sed
:
sed -e 's/^.//' -e 's/.$//'
# ^^ ^^
# first char last char
एक उदाहरण देखें
sed -e 's/^.//' -e 's/.$//' <<< "(1 2 3 4 5 6 7)"
1 2 3 4 5 6 7
बहुत बढ़िया! बहुत धन्यवाद!!!!! – user1508893
मुझे 'sed' का उपयोग करना पसंद है। एक सवाल, हालांकि, यह क्यों काम नहीं करता है? 'sed's/^। \ (। * \)। $/\ 1/'s_res.temp> s_res.temp'? – user1508893
क्योंकि रीडायरेक्शन फ़ाइल पढ़ने से पहले फ़ाइल को छोटा कर देता है। मैं इसके लिए अपना जवाब अपडेट करूंगा। – c00kiemon5ter