लिनक्स पर CRLF की लाइन फ़ीड में कनवर्ट करें


34

लिनक्स पर फाइलों में फीड्स के लिए CRLF को लाइन में बदलने का सबसे अच्छा तरीका क्या है ?

मैंने sed कमांड देखी है , लेकिन क्या कुछ सरल है?


4
डुप्‍ली: सुपरयुसर . com/questions/ 38744/… । स्वीकृत उत्तर में दिए गए लिंक में dos2unix, perl और vi विकल्प शामिल हैं।
नगुल

2
इसका पहले से ही बेहतर जवाब है (हालांकि अगर इनमें से एक को बंद किया जाना है, तो यह संभवतः ऐसा ही होना चाहिए)
जोनीक

जवाबों:


40

इस कमांड का उपयोग करें:

fromdos yourtextfile

दूसरी तरह के आसपास:

todos yourtextfile

ये कमांड टॉफ्रोडोस पैकेज (अधिकांश हालिया वितरण पर) में पाए जाते हैं , जो दो रैपर unix2dos और dos2unix प्रदान करता है जो एक ही नाम के पुराने यूनिक्स टूल की नकल करते हैं।


2
+1 वर्तमान में शीर्ष-वोट किए गए "उपयोग dos2unix" उत्तर की तुलना में बहुत अधिक उपयोगी है।
जोनीक

1
हाँ, यहां तक ​​कि मैं इसे एक वोट कर रहा हूं। मेरा एक ड्राइव-बाय सुझाव था।
रयान सी। थॉम्पसन

यदि आप कहते हैं कि मैं इसे पुनरावर्ती बनाने के लिए अतिरिक्त बोनस दूंगा। वर्तमान में केवल वाइल्डकार्ड के साथ काम करता है।
सोरिन

2
@ सोरिनस्बर्निया: कुछ इस तरहfind . -name '*.txt' -print0 | xargs -null fromdos
bstpierre

@ जोनिक इसे "बहुत अधिक उपयोगी" बनाता है? गंभीर प्रश्न
एंड्रयूटबर

24

का उपयोग करें dos2unix

dos2unix - DOS / MAC को UNIX पाठ फ़ाइल स्वरूप कनवर्टर

dos2unix  [options] [-c convmode] [-o file ...] [-n infile outfile ...]

Options:
          [-hkqV] [--help] [--keepdate] [--quiet] [--version]

2
और unix2dos दूसरे रास्ते 'दौर के लिए।
क्विकोट को

क्वैक, क्या तुम मेरा पीछा कर रहे हो? ऐसा नहीं है कि मैं इसकी सराहना नहीं करता, सभी उत्थानों के साथ।
रयान सी। थॉम्पसन

1
यार, मैं ~ क्वैक। उच्चारण "~" के रूप में "नहीं"। :) लेकिन नहीं, आपका पीछा नहीं करते हुए, मुझे लगता है कि आप में अक्सर भागते हैं।
क्विकोट

1
अपने लिनक्स सिस्टम के लिए यह उपयोगिता कैसे प्राप्त करें, इस पर विस्तार से विचार करें। कम से कम उबंटू पर यह डिफ़ॉल्ट रूप से स्थापित नहीं है (लेकिन टॉफ्रोडोस पैकेज स्थापित करने से आपको कुछ समान मिलता है: packages.ubuntu.com/jaunty/tofrodos )।
जोनीक

20

मैं पर्ल पसंद करता हूं :

perl -lne 's/\r//g; print' winfile.txt > unixfile.txt

लेकिन यह मेरे उपयोगों के अनुकूल है, और मुझे याद रखना बहुत आसान है। सभी प्रणालियों में एक dos2unix कमांड नहीं है, लेकिन सबसे ज्यादा जिस पर मैं काम करता हूं वह एक पर्ल इंटरप्रेटर है।

एक और है recode , dos2unix और iconv के लिए एक शक्तिशाली प्रतिस्थापन; यह डेबियन रिपॉजिटरी में "रिकोड" पैकेज में उपलब्ध है:

recode ibmpc..lat1 winfile.txt   # dos2unix
recode lat1..ibmpc unixfile.txt  # unix2dos

के लिए awk प्रशंसकों:

awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt

... और sed :

sed 's/\r$//' winfile.txt > unixfile.txt

और अब, हेक्स संपादक में सीआर के हाथ से हटाने के मुकाबले केवल थोड़ा-कम-दोषपूर्ण है, सीधे हमारे एक से एक stackoverflow.com दोस्तों , बीफ़ दुभाषिया के साथ प्रयोग करने योग्य (आपके अनुकूल पड़ोस डेबियन रिपॉजिटरी पर स्थित)।

में dos2unix dos2unix !

,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.

यह लिखने के लिए अपने जीवन के एक घंटे को बर्बाद करने के लिए jk के लिए बड़ा धन्यवाद!


1
(बिल्ली का बेकार उपयोग और) perl sed जितना ही जटिल है ... इस प्रकार आप वास्तव में सवाल का जवाब नहीं दे रहे हैं बल्कि प्रतिष्ठा
बटोर रहे हैं

2
"सबसे अच्छा तरीका" व्यक्तिपरक है। यह मेरे लिए सबसे अच्छा काम करता है (मैं sed की तुलना में पर्ल के साथ अधिक आरामदायक हूं)। मैंने वादा किया था कि यह आपके लिए सबसे अच्छा काम करेगा।
क्विकोट

@akira: एक प्रश्न के कई मान्य उत्तर हो सकते हैं। मैं इस पद्धति का उपयोग करता हूं, कभी-कभी, ज्यादातर अन्य परिवर्तनों के संयोजन में, इसलिए यह निश्चित रूप से एक मान्य उत्तर है; लेकिन "dos2unix का उपयोग करें" निश्चित रूप से अधिकांश स्थितियों में अधिक व्यावहारिक उत्तर है। इसलिए मुझे लगता है कि रेटिंग्स ठीक हैं।
रीइन्टीरियरपोस्ट

@akira: यदि आपको यह सरल लगता है, तो कृपया इसे उत्तर के रूप में पोस्ट करें और हम में से बाकी लोगों को बताएं।
क्विकोटे

@ ~ क्वैक: वह बिंदु है: यह सरल नहीं है। अपने पर्ल जवाब के लिए एक ही है। u2d या fromdos / todos सही उत्तर हैं क्योंकि वे किसी भी अन्य प्रोग्रामिंग भाषा में व्यक्त किए गए किसी भी सामान की तुलना में सरल हैं।
अकीरा

9

मैं यह बैश पर करता हूं :

cat cr_stuffed.file | tr -d \r > no_more_crs.file

अच्छा। मैंने आज tr का एक और उल्लेख देखा। यह एक ऐसा कार्यक्रम नहीं है जिसका उल्लेख बहुत बार किया जाता है?
क्वैक

7

मुझे लगता है कि आप उपयोग कर सकते हैं tr, साथ ही (हालांकि मेरे पास कोई अजीब प्रारूप फाइलें नहीं हैं, जिस पर प्रयास करने के लिए):

tr -d '\r' < file1 > file2


4

मुझे बहुत आसान तरीका मिला… नैनो के साथ खुली फाइल: ## नैनो file.txt

बचाने के लिए Ctrl + O दबाएं, लेकिन Enter दबाने से पहले: Alt + D को betwen DOS और Unix / Linux लाइन-एंडिंग को टॉगल करने के लिए, या: Alt + M से betwen मैक और Unix / Linux लाइन-एंड को टॉगल करने के लिए तब सहेजें और एंटर करने के लिए Enter दबाएँ Ctrl + X छोड़ने के लिए।


1
क्या आप अपना जवाब स्पष्ट करने के लिए संपादित कर सकते हैं कि कौन सी टॉगल सेटिंग ओपी द्वारा अनुरोधित व्यवहार को दोहराएगी?
बरगी

ओपी डॉस लाइन एंडिंग को बंद करना चाहता है , इसलिए Alt+d। कभी-कभी Alt टर्मिनल प्रोग्राम द्वारा इंटरसेप्ट हो जाता है, इसलिए आप esc+dइसके बजाय उपयोग कर सकते हैं ।
स्पिनअप

1
नैनो शॉर्टकट के बहुत सारे शिफ्ट प्रेस के साथ भी काम करते हैं, जो अक्सर टर्मिनल अवरोधन को रोकता है, इसलिए 'Alt-Shift-D' भी काम करता है।
mwfearnley

3

मैं पसंद विम और :set fileformat=unix। जबकि सबसे तेज़ नहीं है, यह मुझे एक पूर्वावलोकन देता है। यह मिश्रित एंडिंग वाली फ़ाइल के मामले में विशेष रूप से उपयोगी है।


1

यदि आप GUI विधि चाहते हैं, तो केट पाठ संपादक का प्रयास करें (अन्य उन्नत पाठ संपादक भी इसे संभालने में सक्षम हो सकते हैं)। खोलें खोज / बदलें संवाद ( Ctrl+ R), और की जगह \r\nके साथ\n । (NB: आपको ड्रॉप डाउन से "रेगुलर एक्सप्रेशन" चुनने की ज़रूरत होगी और विकल्पों में से "सिलेक्शन केवल" का चयन रद्द करें।)

संपादित करें: या, अगर आप बस यूनिक्स प्रारूप करने के लिए परिवर्तित करना चाहते हैं, तो मेनू विकल्प का उपयोग Tools> End of Line> Unix


टेक्स्ट एडिटर होते हैं, जैसे कि jEdit, जो इन परिवर्तनों को स्वचालित रूप से कर सकते हैं - आप इसे यूनिक्स, विंडोज या मैक लाइन सेपरेटर चाहते हैं।
जोनीक

दरअसल, KATE वह भी टूल मेनू के अंत के माध्यम से कर सकता है । हो सकता है कि मुझे इस प्रश्न का उत्तर देने की तुलना में बाद में अधिक सोचा जाना चाहिए था जैसा कि यह कहा गया था - लेकिन अगर आप जानते हैं कि आप विशेष रूप \r\nसे \nतब कनवर्ट करना चाहते हैं तो खोज / प्रतिस्थापन का उपयोग करना याद रखना आसान है, जो ओएस का उपयोग करता है जो लाइन समाप्त होता है। ;)
असंतुष्ट

1

इसे dos2unix.py Python स्क्रिप्ट में पेस्ट करें ।

#!/usr/bin/env python
"""\
convert dos linefeeds (crlf) to unix (lf)
usage: dos2unix.py <input> <output>
"""
import sys

if len(sys.argv[1:]) != 2:
  sys.exit(__doc__)

content = ''
outsize = 0
with open(sys.argv[1], 'rb') as infile:
  content = infile.read()
with open(sys.argv[2], 'wb') as output:
  for line in content.splitlines():
    outsize += len(line) + 1
    output.write(line + '\n')

print("Done. Saved %s bytes." % (len(content)-outsize))

किसी भी मंच पर पायथन स्थापित के साथ काम करना चाहिए। पब्लिक डोमेन।


1

CR LFजाग का LFउपयोग करने के लिए :

awk -v RS='\r?\n' 1
command | awk -v RS='\r?\n' 1
awk -v RS='\r?\n' 1 filename

उपयोग उदाहरण:

echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' 1 | hexdump -C

स्पष्टीकरण:

-v RS='\r?\n'सेट चर रुपये ( इनपुट आर ecord रों eparator) करने के लिए \r?\n, जिसका अर्थ है इनपुट पढ़ा जाता है लाइन द्वारा लाइन वामो (द्वारा अलग \n) जो (हो सकता है ?) सीआर से पहले आना ( \r)।

1स्क्रिप्ट awk निष्पादित है। एक स्क्रिप्ट के होते हैं condition { action }। इस मामले में, 1वह स्थिति है जो सत्य का मूल्यांकन करती है। कार्रवाई छोड़ी गई है, इसलिए डिफ़ॉल्ट कार्रवाई निष्पादित की जाती है, जिसका अर्थ है कि वर्तमान लाइन को प्रिंट करें (जिसे भी {print $0}या बस के रूप में लिखा जा सकता है {print})।


LFकरने के लिए CR LF: आप चर सेट कर सकते हैं ORS( utput आर ecord रों उत्पादन की लाइन समाप्त होता है को संशोधित करने के eparator)। उदाहरण:

echo -e 'foo\nbar\r\nbaz' | awk -v RS='\r?\n' -v ORS='\r\n' 1 | hexdump -C

0

मैंने इस स्क्रिप्ट का उपयोग उन फ़ाइलों के लिए किया है जिनकी मुझे विंडोज़ सिस्टम से एक यूनिक्स प्रणाली में आपातकालीन स्थानांतरण फ़ाइलों की आवश्यकता है।

 find . -type f | xargs file | grep CRLF | cut -d: -f1 | xargs dos2unix

find . -type f

सभी फ़ाइलों को ढूँढता है, जिस निर्देशिका में आप कमांड से चला रहे हैं

xargs file

फ़ाइल का विश्लेषण प्राप्त करने के लिए इसे फ़ाइल प्रोग्राम में पास करें ।

grep CRLF

हम केवल उस फ़ाइल का आउटपुट चाहते हैं जो CRLF को दिखाता है।

cut -d: -f1

आउटपुट को रंग तक प्राप्त करें। बाकी को त्याग दो। हमें अब केवल एक फ़ाइल नाम होना चाहिए

xargs dos2unix

कार्यक्रम के लिए फ़ाइल नाम दर्रा dos2unix का उपयोग कर xargs

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