मैं एक टेक्स्ट फ़ाइल से नई सूची कैसे निकालूं?


116

मेरे पास निम्न डेटा है, और मुझे यह सब एक पंक्ति में रखना होगा।

मेरे पास यह है:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

मुझे इसकी जरूरत है:

22791;14336;22821;34653;21491;25522;33238;

संपादित करें

इनमें से कोई भी आदेश पूरी तरह से काम नहीं कर रहा है।

उनमें से अधिकांश डेटा को इस तरह से देखते हैं:

22791

;14336

;22821

;34653

;21491

;25522

15
ब्राउजर के एड्रेस बार या किसी अन्य टेक्स्ट फील्ड में कॉपी-पेस्ट करें। Quick'n'dirty लेकिन कम मात्रा में डेटा के लिए काम करता है।
इग्निस

जवाबों:


245
tr -d '\n' < yourfile.txt

संपादित करें:

यदि यहां पोस्ट की गई कोई भी कमांड काम नहीं कर रही है, तो आपके पास अपने खेतों को अलग करने वाली एक नई लाइन के अलावा कुछ और है। संभवतः आपके पास फ़ाइल में डॉस / विंडोज लाइन एंडिंग है (हालांकि मैं उस मामले में भी पर्ल के समाधान की उम्मीद करूंगा)

प्रयत्न:

tr -d "\n\r" < yourfile.txt

यदि वह काम नहीं करता है, तो आपको अपनी फ़ाइल का अधिक बारीकी से निरीक्षण करना होगा (जैसे एक हेक्स संपादक में) यह पता लगाने के लिए कि वास्तव में वे कौन से वर्ण हैं जिन्हें आप निकालना चाहते हैं।


7
आप इस आउटपुट को उसी या किसी अन्य फ़ाइल में कैसे लिखते हैं?
गोल्डनाम

3
मुझे लगता trहै कि खाली लाइनों के लिए उपयुक्त नहीं है। तुम क्या सोचते हो? - - मुझे लगता sedहै कि यहां सबसे अच्छा विकल्प है जैसा कि यहां बताया गया है stackoverflow.com/q/16414410/54964
Léo Léopold Hertz

आउटपुट को किसी अन्य फ़ाइल में रूट करने के लिए बस आउटपुट पुनर्निर्देशन का उपयोग करें। इसे उसी फ़ाइल पाइप में रूट करने के लिए इसे "स्पंज" (डेबियन बेस सिस्टम पर "मोरटाइल" पैकेज में उपलब्ध)।
प्लगवॉश करें

आउटपुट को एक ही फ़ाइल में लिखने के लिए, एक सबecho -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
andpei


9
paste -sd "" file.txt

1
सोलारिस पर (10) paste -sd ""डिफ़ॉल्ट रूप से STDIN पर काम नहीं करता है, इसलिए यदि आप इसे पाइप कर रहे हैं, तो उपयोग करें: (some command) | paste -sd "" -
JohnGH

यह काम नहीं करता है यदि आप अंतिम नईलाइन को निकालना चाहते हैं । यह केवल मध्यवर्ती न्यूलाइन्स को हटाता है।
जॉच

यह मैक ओएस पर काम नहीं किया, सुंदीप के संस्करण ने किया। paste -sd'\0' -
ट्रेंटन

7
tr -d '\n' < file.txt

या

awk '{ printf "%s", $0 }' file.txt

या

sed ':a;N;$!ba;s/\n//g' file.txt

यह पृष्ठ यहाँ निकालें नई-पंक्तियों के लिए अन्य तरीकों का एक समूह है।

बिल्ली के समान दुरुपयोग को दूर करने के लिए संपादित :)


4

उपयोग

head -n 1 filename | od -c 

यह पता लगाने के लिए कि अपमानजनक चरित्र क्या है। तो उपयोग करें

tr -d '\n' <filename

LF के लिए

tr -d '\r\n' <filename

CRLF के लिए



2

आदमी 1 एड का उपयोग करना:

# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed 
ed -s file <<< $'1,$j\n,p'  # print to stdout 
ed -s file <<< $'1,$j\nwq'  # in-place edit

2

बेवकूफ तथ्य: इसके बजाय ASCII का उपयोग करें।

tr -d '\012' < filename.extension   

(संपादित कारण मुझे ऐसा समाधान नहीं मिला था, जो केवल एक ही समाधान था, मेरा अंतर ASCII था)


2

POSIX कक्षाओं के साथ sed का उपयोग करें

यह केवल व्हाट्सएप (रिक्त स्थान और टैब) वाली सभी लाइनों को हटा देगा

sed '/^[[:space:]]*$/d'

बस आप जो कुछ भी काम कर रहे हैं, उसे लें और उसे उसी पर पाइप करें

उदाहरण

cat filename | sed '/^[[:space:]]*$/d'


sed -i '/ ^ [[: space:]] * $ / d' फ़ाइल नाम ... स्थान संपादन के लिए; स्क्रीन पर आउटपुट के रूप में ऊपर का जवाब
ब्रैडकिसनी79


1

यदि डेटा file.txt में है, तो:

echo $(<file.txt) | tr -d ' '

' $(<file.txt)' फ़ाइल को पढ़ता है और सामग्री को शब्दों की एक श्रृंखला के रूप में देता है जो 'गूंज' तो उनके बीच एक स्थान के साथ गूँजती है। 'Tr' कमांड किसी भी स्थान को हटाता है:

22791;14336;22821;34653;21491;25522;33238;

यह तब तक काम करता है जब तक इनपुट बहुत बड़ा नहीं होता और जब तक आप बैश का उपयोग कर रहे होते हैं (बैश के लिए टैग किया जाता है, तो यह ठीक है)। क्या मैं अब उत्तर लिख रहा था, यह वही होगा tr -d '\n' < file.txt, जो स्वीकृत उत्तर देता है (और मुझे आश्चर्य है कि मैंने इसे उस समय नहीं लिखा था)। यह शायद सिर्फ 'अभी तक इसे करने का एक और तरीका' दिखाने के लिए लिखा गया था।
जोनाथन लेफ़लर

1

xargs खपत के रूप में अच्छी तरह से newlines (लेकिन एक अंतिम अनुगामी newline कहते हैं):

xargs < file.txt | tr -d ' '

1

यह मानते हुए कि आप केवल अंकों और अर्धविरामों को रखना चाहते हैं, निम्नलिखित को यह सोचना चाहिए कि कोई प्रमुख एन्कोडिंग मुद्दे नहीं हैं, हालांकि यह बहुत अंतिम "न्यूलाइन" को भी हटा देगा:

$ tr -cd ";0-9"

आप अन्य वर्णों को शामिल करने के लिए आसानी से उपरोक्त को संशोधित कर सकते हैं, जैसे कि यदि आप दशमलव अंक, अल्पविराम आदि को बनाए रखना चाहते हैं।


1

Gedit टेक्स्ट एडिटर का उपयोग करना (3.18.3)

  1. खोज पर क्लिक करें
  2. ढूँढें और बदलें पर क्लिक करें ...
  3. खोजें फ़ील्ड \n\sमें दर्ज करें
  4. छोड़ दो के साथ बदलें (कुछ नहीं) खाली
  5. नियमित अभिव्यक्ति की जाँच करें बॉक्स की
  6. फाइंड बटन पर क्लिक करें

नोट: यह ओपी की मूल, 7 वर्ष पुरानी समस्या को ठीक से संबोधित नहीं करता है, लेकिन कुछ noob linux उपयोगकर्ताओं (मेरे जैसे) की मदद करनी चाहिए, जो एसई के समान "यहाँ कैसे मैं एक पंक्ति में अपने पाठ को प्राप्त करूँ" सभी सवालों के साथ अपना रास्ता ढूंढता हूँ ।


1

आज एक ही मामला चल रहा था, vim या nvim में सुपर आसान, आप gJलाइनों में शामिल होने के लिए उपयोग कर सकते हैं । अपने उपयोग के मामले के लिए, बस करें

99gJ

यह आपकी सभी 99 पंक्तियों में शामिल हो जाएगा। आप 99कितनी लाइनों में शामिल हो सकते हैं, इसके अनुसार संख्या को आवश्यकतानुसार समायोजित कर सकते हैं । अगर सिर्फ 1 लाइन से जुड़ते हैं , तो केवल gJकाफी अच्छा है।


0

मैं इसे awk के साथ करूँगा, उदा

awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt

(नुकसान यह है कि स्मृति में "संचित" है)।

संपादित करें

प्रिंटफ़ के बारे में भूल गए! इसलिए भी

awk '/[0-9]+/ { printf "%s;", $0 }' file.txt

या बेहतर होने की संभावना है, जो पहले से ही अक्स का उपयोग करके अन्य एन्स में दिया गया था।


0

मुझे आमतौर पर यह usecase मिलता है जब मैं एक फ़ाइल से एक कोड स्निपेट कॉपी कर रहा हूं और मैं इसे अनावश्यक नई लाइनों को जोड़ने के बिना एक कंसोल में पेस्ट करना चाहता हूं, मैंने एक बैश उपनाम
(इसे कहा जाता है onelineअगर आप उत्सुक हैं)

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o मेरा क्लिपबोर्ड पढ़ता है

  • tr -d '\n' नई लाइनें निकालता है

  • tr -s ' ' पुनरावर्ती रिक्त स्थान को निकालता है

  • xsel -b -i मेरे क्लिपबोर्ड पर वापस धकेलता है

उसके बाद मैं क्लिपबोर्ड की नई सामग्री को कंसोल में या जो भी हो, ऑनलाइन में पेस्ट कर दूंगा।


0

आप विशेष रूप से जब आप कुछ अजीब शब्द-आवरण को ठीक करने के लिए GUI में ऐसा करने की आवश्यकता है, तो आप सबसे स्पष्ट और तेज़ उत्तर याद कर रहे हैं।

  • खुला हुआ gedit

  • फिर Ctrl+ H, फिर Findटेक्स्टबॉक्स \nमें डालें और Replace withखाली जगह पर फिर चेकबॉक्स Regular expressionऔर वॉइला भरें ।


0

फ़ाइल के अंत में अनुगामी न्यूलाइन को निकालने के लिए भी

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.