VOS में लाइन लाइन अंत में DOS लाइन अंत में कनवर्ट करें


717

अगर मैं विंडोज में बनाई गई फाइलों को खोलता हूं, तो लाइनें खत्म हो जाती हैं ^M
मैं इन वर्णों को एक साथ कैसे हटाऊं?


यदि आप एक करते हैं hexdump -C badfileऔर देखते हैं 0x0d 0x0a "\r\n"कि आपकी समस्या है।
यज़्मीर रामिरेज़

जवाबों:


1074

dos2unix एक कमांडलाइन यूटिलिटी है जो यह करेगी, या ^ M को इनपुट करने के :%s/^M//gलिए Ctrl- v Ctrl- mका उपयोग करेगी , या आप कर सकते हैं :set ff=unixऔर vim इसे आपके लिए करेंगे।

'फाइलफॉर्मैट' सेटिंग पर डॉक्स यहां हैं , और विम विकी का एक व्यापक पृष्ठ है, जिसका अंत रूपांतरणों के लिए है

वैकल्पिक रूप से, यदि आप फ़ाइलों को बहुत आगे पीछे करते हैं, तो आप उन्हें परिवर्तित नहीं करना चाहते हैं, बल्कि ऐसा करना चाहते हैं :set ff=dos, इसलिए विम को पता होगा कि यह एक डॉस फ़ाइल है और लाइन अंत के लिए डॉस सम्मेलनों का उपयोग करें।


56
:%s/^M//gहोना चाहिए :%s/\r//g, क्योंकि ^Mबस लाइन की शुरुआत में "मैच कैपिटल" एम "का मतलब है"।
बुनक

78
यदि आप ऐसा नहीं करते हैं जैसा कि उत्तर कहता है और 'एम' इनपुट के लिए ctrl-v ctrl-m का उपयोग करें।
pjz

2
crtl-v अच्छा नहीं है, विंडोज़ पर यह क्लिपबोर्ड सामग्री को कमांड लाइन में चिपका देता है। समाधान :%s/\r//gमेरे लिए काम करता है, चीयर्स @ ब्युनक
डकैती

3
@ आप विंडोज पर क्या चाहते हैं ctrl-q
रफिन

2
मुझे कुछ याद आ रहा है, क्योंकि set ff=unixकुछ भी नहीं है। शायद यह फ़ाइल को रूपांतरित करता है, लेकिन सभी ^Mवर्ण अभी भी हैं।
felwithe

276

दृश्य में लाइन अंत बदलें:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

इसे सेविंग ऑपरेशन के रूप में भी इस्तेमाल किया जा सकता है: (w अकेले स्क्रीन पर आपके द्वारा देखी गई लाइन एंडिंग का उपयोग करके बचत नहीं करेगा):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

और आप इसे कमांड-लाइन से उपयोग कर सकते हैं:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done

4
आपका बहुत बहुत धन्यवाद। मैंने vi + 'की कोशिश की: wq ++ ff = unix' <filepath> मेरे जैसे आलसी के लिए।
a_secenthyer

2
यह सबसे उत्कीर्ण उत्तर होना चाहिए। :w +ff=unixयहाँ लिखे गए अन्य सामानों की तुलना में बहुत अच्छा है, और बैश स्क्रिप्ट एक अच्छा बोनस है।
मस्कबर्ग

:eआदेशों मेरे Windows पर कुछ भी करने को विम स्थापित नहीं दिखाई देते। मेरा विचार अभी भी ^Mकोड दिखाता है ।
ग्रांट बिर्चमेयर

160

मैं आमतौर पर उपयोग करता हूं

:%s/\r/\r/g

जो थोड़ा अजीब लगता है, लेकिन जिस तरह से विम मेल खाता है, उसके कारण काम करता है। मुझे भी याद रखना आसान लगता है :)


9
यह लगातार प्लेटफार्मों भर में काम करता है। यहाँ सबसे अच्छा जवाब।
thebigjc

4
मुझे पहले कभी कोई समस्या नहीं हुई :set ff=unix, लेकिन आज मैंने जो फ़ाइल खोली है वह विशेष रूप से अजीब रही होगी। विम ने कहा कि यह पहले से ही था, fileformat=unixलेकिन सभी लाइन अंत थे ^M। इस समाधान ने मेरे लिए काम किया।
क्रिस बी

15
यह समाधान मेरे लिए अवांछित अतिरिक्त लाइनें जोड़ता है, फ़ाइल में लाइनों की संख्या दोगुनी करता है। :%s/\r//gइसके बजाय मेरे लिए काम करता है।
विक्टर ज़ामेनियाई

3
विक्टर, आपकी फ़ाइलों की संभावना \ r \ n अंत है। \ r को एक नई रेखा के रूप में नहीं पढ़ा जाता है, लेकिन \ n है। जिन फ़ाइलों में मैं चल रहा हूँ, वे \ r हैं और आपको एक नया वर्ण जोड़ना होगा।
जोयेगोजोइजर

2
@ VictorZamanian की :%s/\r//gहै केवल विशेष रूप से मिश्रित मोड दोनों DOS- और UNIX- शैली नई-पंक्तियों की एक विषम मिश्रण भी फ़ाइल के लिए - सामान्य प्रयोजन समाधान। विहित समाधान (जैसे, :set ff=unix, :e ++ff=unix) एक ही न्यू लाइन शैली में वर्तमान बफर समाप्त होता है की हर पंक्ति मान। कभी-कभी वे करते हैं; कभी-कभी वे नहीं करते। क्यू की साधना।
सेसिल करी

97

मैं निम्नलिखित कमांड का उपयोग करना पसंद करता हूं:

:set fileformat=unix

आप अपनी फ़ाइल को Macintosh या MS-DOS / MS-Windows फ़ाइल कन्वेंशन में कनवर्ट करने के लिए उपयोग macया dosक्रमशः कर सकते हैं । और यह कुछ भी नहीं करता है यदि फ़ाइल पहले से ही सही प्रारूप में है।

अधिक जानकारी के लिए, विम सहायता देखें:

:help fileformat

1
यह आदेश मेरे विंडोज विम पर कुछ भी करने के लिए प्रकट नहीं होता है। मेरे विचार में अभी भी इसमें ^Mचार चांद हैं।
ग्रांट बर्चमियर

set fileformat=unixमेरे .vimrc फ़ाइल में जोड़ने से काम हुआ।
जॉय एलन

20

:set fileformat=unix डॉस से यूनिक्स में बदलने के लिए।


1
इसने वास्तव में मेरे लिए इस मुद्दे को हल कर दिया। खोज करते समय मैं उन पात्रों को नहीं खोज पाया।
कप्तान इन्सानो

20
:%s/\r+//g

विम में, कि सभी गाड़ी वापस आ जाती है, और केवल नई सुर्खियाँ छोड़ती हैं।


2
ऊपर किसी कारण से मेरे लिए Windows gvim के तहत काम नहीं किया। लेकिन जब इसमें बदलाव किया गया तो :%s/\r//gयह एक आकर्षण की तरह काम करता था।
सॉल्टीश

1
@ शोले:% s / \ r \ + $ // g
विचारक ३३

14

आधिकारिक डॉक्टर साइट पर इंगित करने के लिए +1। उपरोक्त लिंक का उपयोग करने वाले किसी व्यक्ति के लिए, उस पृष्ठ पर "वर्तमान फ़ाइल को परिवर्तित करना" अनुभाग देखें।
टिन मैन

यह + विम-बी <फ़ाइल नाम> एक आकर्षण की तरह काम करता है, धन्यवाद, +1
जन मोलाक

10

डॉस से यूनिक्स के लिए फ़ाइलों की निर्देशिका कन्वर्ट

कमांड लाइन और sed का उपयोग करके, एक्सटेंशन ".ext" के साथ वर्तमान निर्देशिका में सभी फाइलें ढूंढें और सभी "^ M" को हटा दें

@ https://gist.github.com/sparkida/7773170

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

ऊपर भी, जैसा कि ऊपर उल्लेख किया गया है ^ M = Ctrl+V+ Ctrl+M(केवल कैरेट टाइप न करें "^" प्रतीक और M)


9

dos2unix सीधे फ़ाइल सामग्री को संशोधित कर सकते हैं।

आप इसे सीधे फ़ाइल पर उपयोग कर सकते हैं, जिसमें अस्थायी फ़ाइल पुनर्निर्देशन की कोई आवश्यकता नहीं है।

dos2unix input.txt input.txt

उपरोक्त मान लिया गया यूएस कीबोर्ड का उपयोग करता है। का प्रयोग करें -ब्रिटेन कीबोर्ड का उपयोग करने 437 विकल्प।

dos2unix -437 input.txt input.txt


6

निम्न चरण डॉस के लिए फ़ाइल स्वरूप को यूनिक्स में बदल सकते हैं:

:e ++ff=dos  Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix    This buffer will use LF-only line endings when written.[A 2]
:w   Write buffer using unix (LF-only) line endings.

संदर्भ: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix


6

निम्नलिखित आदेश के साथ:

:%s/^M$//g 

^Mप्रकट करने के लिए टाइप करेंCtrlV तो CtrlMCtrlVशाब्दिक रूप से दर्ज किए गए अगले चरित्र को लेने के लिए विम को बताता है।


6

^ M को प्रदर्शित करने के बारे में टिप्पणी मेरे लिए काम की है। मेरे vi में "^ M" टाइप करने से कुछ नहीं मिला (नहीं मिला)। द CTRL+ V CTRL+M अनुक्रम पूरी तरह से हालांकि यह किया था।

मेरी वर्किंग सबस्टेशन की कमान थी

:%s/Ctrl-V Ctrl-M/\r/g

और यह मेरी स्क्रीन पर इस तरह दिखता था:

:%s/^M/\r/g

4
आप उपयोग कर सकते हैं :%sके बजाय :1,$s%के लिए आशुलिपि है 1,$
टिन मैन

5

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

प्रेस CTRL+ Oको बचाने के लिए, लेकिन दबाने से पहले Enter, प्रेस: ALT+ Dto betwen DOS और Unix / Linux लाइन-एंडिंग्स टॉगल करें , या: ALT+ Mto betwen Mac और Unix / Linux लाइन-एंडिंग्स को टॉगल करें और फिर Enterसेव और CTRL+ Xछोड़ने के लिए दबाएँ ।


यह एक linux सर्वर पर किया जाता है, फाइल का ^Mअंत होता है। बचाने के लिए डॉस के रूप में सहेजें, हटाने के लिए लिनक्स के रूप में सहेजें। का उपयोग कर जाँच कर सकते हैंcat -v
HattrickNZ

यह प्रश्न व्योम के बारे में है, नैनो के बारे में नहीं।
ग्रांट बिर्चमियर

5
:g/Ctrl-v Ctrl-m/s///

CtrlMचरित्र \rया कैरिज रिटर्न है, जो डॉस लाइन एंडिंग जोड़ता है। कमांड लाइन पर CtrlVशाब्दिक CtrlMचरित्र डालने के लिए विम बताता है ।

समग्र रूप से लिया गया, यह आदेश सभी \rको कुछ नहीं के साथ बदल देता है , उन्हें लाइनों के छोर से हटा देता है।



3

आप निम्न कमांड का उपयोग कर सकते हैं:
:%s/^V^M//g
जहां '^' का अर्थ CTRLकुंजी का उपयोग करना है ।


2

नीचे कमांड का उपयोग वर्तमान निर्देशिका में सभी .sh फ़ाइल के सुधारक के लिए किया जाता है, मैंने इसे अपने फेडोरा ओएस पर परीक्षण किया।

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

2

विम में, टाइप करें:

:w !dos2unix %

यह आपके वर्तमान बफ़र की सामग्री को dos2unix कमांड पर पाइप करेगा और वर्तमान सामग्रियों पर परिणाम लिखेगा। विम के बाद फ़ाइल को फिर से लोड करने के लिए कहेंगे


2

सीधे लिनक्स कंसोल में चलाने के लिए: vim file.txt +"set ff=unix" +wq


1

आमतौर पर इसके लिए एक dos2unixकमांड है जिसका आप उपयोग कर सकते हैं, बस सुनिश्चित करें कि आप मैनुअल को पढ़ते हैं क्योंकि GNU और BSD संस्करण भिन्न होते हैं कि वे तर्कों से कैसे निपटते हैं।

बीएसडी संस्करण:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

GNU संस्करण:

dos2unix $FILENAME

वैकल्पिक रूप से, आप dos2unixयहाँ प्रस्तावित किसी भी उत्तर के साथ अपना स्वयं का बना सकते हैं , उदाहरण के लिए:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}

1

मुझे पता था कि मैंने इसे कहीं देखा होगा। यहाँ FreeBSD लॉगिन टिप है:

उन सभी ^ M वर्णों को DOS फ़ाइल से निकालने की आवश्यकता है? प्रयत्न

tr -d \\r < dosfile > newfile
    -- Originally by Dru <genesis@istar.ca>

0

हालाँकि यह विषय बहुत पुराना है, फिर भी मैं विकिया का एक और सामान रखना चाहता हूँ:

%s/\r\+$//g

भरें कि सभी गाड़ी वापसी के संकेत (एक और अधिक प्रतिनिधि) लाइन के अंत तक और हटा दें, इसलिए बस \nईओएल पर रहेंगे।


0

यह मेरा तरीका है। मैंने डॉस ईओएल में एक फ़ाइल खोली और जब मैं उस फाइल को सहेजता हूं जो स्वचालित रूप से यूआईएक्स ईओएल में बदल जाएगी

autocmd BufWrite * :set ff=unix

0

यदि आप विंडोज़ में नोटपैड या नोटपैड ++ में एक फ़ाइल बनाते हैं और इसे लिनक्स में लाते हैं और इसे vim द्वारा खोलते हैं, तो आपको प्रत्येक पंक्ति के अंत में ^ M दिखाई देगा। इसे दूर करने के लिए,

अपने लिनक्स टर्मिनल पर, टाइप करें

dos2unix filename.ext

यह आवश्यक जादू करेगा।


0

मैं ^ M की जगह पर नई सुर्खियाँ चाहता था। बचाव के लिए पर्ल:

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

या stdout को लिखने के लिए:

perl -p -e 's/\x0d/\n/g' < excel_created.txt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.