किसी दिए गए टेक्स्ट फ़ाइल से सभी सफेद रिक्त स्थान कैसे निकालें


81

मैं एक दिए गए पाठ फ़ाइल से सभी सफेद रिक्त स्थान को निकालना चाहता हूं। क्या इसके लिए कोई शेल कमांड उपलब्ध है? या, sedइस उद्देश्य के लिए कैसे उपयोग करें।

मुझे नीचे जैसा कुछ चाहिए:

$ बिल्ली hello.txt | सेड…।

मैंने यह कोशिश की: cat hello.txt | sed 's/ //g'लेकिन यह केवल स्थान हटाता है, टैब नहीं।


3
"सभी व्हाट्सएप" के माध्यम से, क्या आप का अर्थ है नई समाचारों के साथ-साथ?
ग्लेन जैकमैन

जवाबों:


133
$ man tr
NAME
    tr - translate or delete characters

SYNOPSIS
    tr [OPTION]... SET1 [SET2]

DESCRIPTION
   Translate, squeeze, and/or delete characters from standard 
   input, writing to standard output.

आप कोशिश कर सकते हैं newlines सहित सभी व्हाट्सएप पोंछने के लिए:

cat file.txt | tr -d " \t\n\r" 

आप वर्ण द्वारा परिभाषित वर्ण वर्गों का भी उपयोग कर सकते हैं ( htompkins टिप्पणी का श्रेय ):

cat file.txt | tr -d "[:space:]"

उदाहरण के लिए, सिर्फ क्षैतिज सफेद स्थान को पोंछने के लिए:

cat file.txt | tr -d "[:blank:]"

23
आप द्वारा परिभाषित वर्ण वर्गों का भी उपयोग कर सकते हैं tr। उदाहरण: हटाने के लिए सभी खाली स्थान के: cat file.txt | tr -d "[:space:]" सभी क्षैतिज खाली स्थान के हटाने के लिए:cat file.txt | tr -d "[:blank:]"
htompkins

@ user3901666 यह व्हाट्सएप को हटा देगा, हां, यदि उत्पादित उत्पादन का मिलान होगा जो आप चाहते हैं वह कहना मुश्किल है - आपने क्या कोशिश की है?
6o पर पॉलो स्कार्डिन

24

मेरी राय के लिए बहुत सरल:

sed -r 's/\s+//g' filename

2
मैंने अभी इसकी कोशिश की है और यह संशोधित पाठ को STDOUT में आउटपुट करता है, लेकिन फ़ाइल को स्वयं नहीं बदलता है।
मैक्स विलियम्स

4
@ मैक्सविलियम्स - सिडी के साथ (-आई (डैश आई) फ्लैग का उपयोग करें
जेफकार्टर

1
यह नई कहानियों को नहीं हटाता है, निश्चित नहीं है कि ओपी द्वारा चाहता था।
ग्रीम मॉस

11

मुझे लगता है कि आप अंतरिक्ष का सफाया करने के लिए सेड का उपयोग कर सकते हैं, जबकि दूसरी लाइन में बदलने जैसी कुछ जानकारी नहीं खो सकते हैं।

cat hello.txt | sed '/^$/d;s/[[:blank:]]//g'

4
ठीक है, लेकिन मुझे नहीं लगता कि मैं खुद को लिखने के लिए ला tr -d " " < infile.txt > outfile.txt
पाऊंगा

हैलो, यह धन्यवाद काम करता है, लेकिन मैं कुछ स्पष्टीकरण की सराहना करता हूं।
डेविड ओक्वी

11

इसे इस्तेमाल करे:

sed -e 's/[\t ]//g;/^$/d' 

( यहां पाया गया )

पहला भाग सभी टैब ( \t) और रिक्त स्थान को निकालता है, और दूसरा भाग सभी खाली लाइनों को हटा देता है


1
यह वास्तव में काम करता है। देखभाल करने के लिए sed -e 's / [\ t] // g; / ^ $ / d' विशेष रूप से / ^ $ / d 'की व्याख्या करें। मुझे पता है ^ स्ट्रिंग की शुरुआत के लिए है, $ अंत के लिए है। / d सीड का उपयोग करते समय हटाने के लिए है। लेकिन यह व्याख्या कैसे सफेद रिक्त स्थान को हटाने का नेतृत्व करती है?
डेविड ओक्वी

मैंने एक स्पष्टीकरण जोड़ा। ^$एक खाली रेखा से मेल खाता है क्योंकि यह "लाइन की शुरुआत" (^) की तलाश में है और उसके तुरंत बाद, "लाइन का अंत" ($)।
कीसर

6

यदि आप सभी व्हाट्सएप को हटाना चाहते हैं , तो यहां तक ​​कि नई खबरें भी:

perl -pe 's/\s+//g' file



2

इसे इस्तेमाल करे:

tr -d " \t" <filename

अधिक विवरण के लिए tr (1) के लिए मैनपेज देखें।


2

यार, अपने टर्मिनल में बस अजगर टेस्टोस्टेरोन।

f = open('/home/hduser/Desktop/data.csv' , 'r')

x = f.read().split()
f.close()

y = ' '.join(x)
f = open('/home/hduser/Desktop/data.csv','w')
f.write(y)
f.close()

एक पुराने धागे को टक्कर देने के लिए क्षमा करें, लेकिन f.read().strip("\t\n\r ")अधिक कुशल नहीं है ?
जाचडि़या

क्या होगा अगर दो या अधिक बाद के रिक्त स्थान, टैब आदि हैं b / w शब्द? मुझे लगता है कि आपका समाधान श्वेत-रिक्त स्थानों की अग्रणी और अनुगामी है। यदि आप एक लाइनर चाहते हैं, तो आप आसानी से उपरोक्त कोड को बदल सकते हैं।
अग्निबेश चौहान

2

यह उत्तर अन्य के समान है, क्योंकि कुछ लोगों की शिकायत है कि आउटपुट STDOUT को जाता है, मैं इसे मूल फ़ाइल पर पुनर्निर्देशित करने और इसे अधिलेखित करने का सुझाव देने जा रहा हूं। मैं आम तौर पर यह कभी नहीं सुझाता लेकिन कभी-कभी त्वरित और गंदे काम करता है।

cat file.txt | tr -d " \t\n\r" > file.txt

1

हम्म ... लगता sed -e "s/[ \t\n\r\v]//g" < hello.txtहै कि सही बॉलपार्क में होना चाहिए के आदेश पर कुछ (किसी भी मामले में साइबर के तहत काम करने लगता है)।

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