2009-10-20 23 views
8

File1:उपयोग किसी पाठ फ़ाइल में सभी प्रमुख/निम्नलिखित खाली रिक्त स्थान को हटाने के लिए sed

hello 
    world 

कैसे एक एसईडी उपयोग करते हुए इस फ़ाइल के भीतर प्रमुख/अनुगामी खाली स्थानों को हटा होगा - एक आदेश का उपयोग कर कोई मध्यवर्ती फाइल ()?

मैं वर्तमान में मिल गया है:

sed -e 's/^[ \t]*//' a > b 

प्रमुख रिक्त स्थान के लिए।

sed 's/ *$//' b > c 

और यह पिछली जगहों के लिए है।

+0

जबकि @ ghostdog74 का जवाब एक अच्छा है, @ mouviciel का जवाब * सही * एक है, आपके प्रश्न के अनुसार। मैं दोनों को उखाड़ फेंक दिया, लेकिन मुझे विश्वास है कि @mouviciel सही जवाब के रूप में स्वीकार करने योग्य है। –

+0

आप सही हैं - मॉविसिक अब स्वीकार कर लिया गया है। अपने समय के लिए mouviciel (सही जवाब) और ghostdog74 (awk दिशाओं) दोनों के लिए धन्यवाद! – user191960

उत्तर

10

आप लगभग यह मिल गया:

sed -i -e 's/^[ \t]*//;s/[ \t]*$//' a 
+3

मैं मिलान '\ s' पर भी विचार करता हूं जो जेनेरिक' सभी व्हाइटस्पेस वर्ण 'है। –

+0

यह 'sed -e'/^ [\ t] * //; s/[\ t] * $ // 'a> c' नहीं होना चाहिए? –

+0

मुझे अभी भी 'sed -e'/^ [\ t] * //; s/[\ t] * $/'a> c' दिखाई देता है जो मेरे लिए काम नहीं करता है (बैश संस्करण 4.3.30, फ़नटू-लिनक्स)। –

7

आसान तरीका, का उपयोग कर awk

awk '{$1=$1}1' file 
:

sed -e 's/^[ \t]*//;s/[ \t]*$//' a > c 
sed के कुछ प्रकारों पर

इसके अलावा, वहाँ भी संपादन इनलाइन लिए एक विकल्प है

या

awk '{gsub(/^ +| +$/,"")}1' file 
+0

पहला व्यक्ति पूरी तरह से काम करता था और सबसे सरल है - मुझे पता नहीं है कि मैंने क्या पूछा (यानी sed) - लेकिन यह इतना सुरुचिपूर्ण है :)। मैं अब अजीब में देख लूंगा। – user191960

+0

पहला व्यक्ति सभी नकली सफेद जगहों को हटा देता है, न केवल अग्रणी और पिछला।दूसरा सबसे अच्छा काम करता है। 'awk' एक महान उपकरण है। – mouviciel

+0

आह, मैं अब पहले स्थान के साथ हटाए गए अन्य रिक्त स्थान देखता हूं - दूसरा एक अतिरिक्त विलोपन के बिना काम करता है। – user191960

3
perl -lape 's/^\s+|\s+$//g' 

ईमानदारी से, मैं पर्ल सबसे अच्छा regexps पता है, तो मैं perl -lape लगता है बहुत आसान sed -e से उपयोग करने के लिए।

sed -e 's/something/something else/' -e 's/another substitution/another replacement/' 

जाहिर है आप भी दो प्रतिस्थापन एक स्ट्रिंग में डाल दिया और, अर्धविराम से उन्हें अलग रूप में संकेत कर सकते हैं:

इसके अलावा, मूल सवाल का जवाब देने के लिए, आप इसी प्रकार अनेक आपरेशन को अंजाम sed है सकते हैं एक और जवाब

0

ध्यान दें कि मध्यवर्ती फाइल का उपयोग किए बिना कोई इनपुट फ़ाइल को एक पंक्ति में कई फिल्टर लागू करने की अधिक सामान्य मामले में, समाधान पाइप का उपयोग करने के लिए है:

sed -e 's/^[ \t]*//' a | sed -e 's/ *$//' > c 

जाहिर है वे यहाँ क्योंकि एक मंगलाचरण की आवश्यकता नहीं है sed का पर्याप्त है, लेकिन अगर दूसरा sed कमांड कुछ अलग था, जैसे uniq या sort, तो यह पैटर्न सही है।

संबंधित मुद्दे