फ़ाइल में sed के साथ डैश से छुटकारा


0

मैं एक स्ट्रिंग (फ़ाइल के अंदर) में कुछ डैश से छुटकारा पाने के लिए sed कमांड का उपयोग करना चाहूंगा, अर्थात, फ़ाइल में एक पंक्ति है जो कहती है:

TEXT=abcdef-lalala-someText-yahoo

Sed निष्पादन के बाद, वह रेखा इस तरह दिखनी चाहिए:

TEXT=abcdeflalalasomeTextyahoo

अग्रिम में धन्यवाद


-1 ठीक से वर्णन नहीं करने के लिए कि आप क्या देख रहे थे।
barlop

विल्मर है काफी यथोचित रूप से उनके प्रश्न का वर्णन किया। शाब्दिक रूप से लिया गया और एक प्रोग्रामर के मुहावरे को देखते हुए, यह बहुत स्पष्ट है कि वह क्या चाहता है। वह बोलता है "ए" स्ट्रिंग और "उस" लाइन, लेकिन उल्लेख नहीं है कोई भी या सब लाइनों। आमतौर पर "फू", "एब्डेफ़", "लालाला" का अर्थ चर डेटा; इसलिए मैं मान सकता हूं कि "TEXT =" और "याहू" स्थिरांक हैं (जब तक कि वे अन्यथा नहीं कहते)। मैं मूल रूप से "याहू" के बारे में अस्पष्ट था, लेकिन मार्क-डाउन के बाद से, मैंने सवाल पर फिर से ध्यान केंद्रित किया है और मुझे अपना जवाब समायोजित करना चाहिए, भले ही विल्मर को मेरी ओवरसाइट के बारे में शिकायत न करने के लिए पर्याप्त अनुग्रह था।
Peter.O

जवाबों:


1

आपकी आगे की टिप्पणी के आधार पर Nifle के जवाब, शायद यह और अधिक जैसा आप देख रहे हैं। यह केवल उन लाइनों पर कार्य करेगा जिनमें सम्‍मिलित है TEXT= के बाद 4 '-' सीमांकित पाठ खंड।

GNU सेड ("TEXT" और "याहू" को स्थिर मानते हुए) का उपयोग करना

sed -re 's/^(TEXT=[^-]+)-([^-]+)-([^-]+)-(yahoo)$/\1\2\3\4/'

या, GNU sed का उपयोग करते हुए (चर के रूप में "=" के बाद सभी पाठ का इलाज)

sed -re 's/^(TEXT=[^-]+)-([^-]+)-([^-]+)-([^-]+)$/\1\2\3\4/'

या, पॉसिक्स पोर्टेबिलिटी के लिए (चर के रूप में "=" के बाद सभी पाठ का इलाज):

sed 's/^\(TEXT=[^-][^-]*\)-\([^-][^-]*\)-\([^-][^-]*\)-\([^-][^-]*\)$/\1\2\3\4/'

3

हेयर यू गो:

echo "TEXT=abcdef-lalala-someText-yahoo" | sed 's/-//g'
TEXT=abcdeflalalasomeTextyahoo

1
sed -i 's/-//g' filename वास्तव में इसे फ़ाइल में क्या बदला जाएगा, यह हर किसी को हटा देगा - हालांकि, जो आप चाहते हैं वह नहीं हो सकता है।
Rob

हालांकि यह काम करता है, मैं इसे डाय करने के लिए थोड़ा अधिक परिष्कृत तरीके से सोच रहा था, उदाहरण के लिए: sed -i s / TEXT = ......-......-......-........ -..... / wayToTellSedToLeaveOriginal6CharsWayToTellSedToLeaveOriginalSecond6CharsAndSoOn "7g 'फ़ाइल नाम
Wilmer

0

यहाँ यह मेरे दो सेंट है ... आप विकल्प कमांड से पहले मैच (TEXT =) जोड़ सकते हैं ... बस इस तरह:

sed '/TEXT=/s/-//g'

परिणाम होंगे:

echo "TEXT=abcdef-lalala-someText-yahoo" | sed '/TEXT=/s/-//g'
TEXT=abcdeflalalasomeTextyahoo

स्थानापन्न कमांड केवल तब निष्पादित किया जाएगा जब पहले क्लॉज से मेल खाते हैं, इस मामले में, "TEXT =" से मेल खाते हैं। मुझे लगता है कि कमान सरल और अधिक सुरुचिपूर्ण होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.