`^ M` क्या है और मुझे इससे कैसे छुटकारा मिलता है?


134

जब मैंने फ़ाइल को खोला vim, तो मुझे अजीब ^Mअक्षर दिखाई दे रहे हैं ।

दुर्भाग्य से, दुनिया का पसंदीदा खोज इंजन प्रश्नों में विशेष पात्रों के साथ अच्छा नहीं करता है, इसलिए मैं यहां पूछ रहा हूं:

  • यह ^Mचरित्र क्या है ?

  • यह वहाँ कैसे मिल सकता है?

  • मुझे इससे छुटकारा कैसे मिलेगा?


3
Vlastimil जो एक व्यर्थ संपादन था। गोट ब्रिटिश अंग्रेजी में प्राप्त करने का उचित भूत काल है।
जेस्सी_ बी

1
यह अधिक जानकारी के लिए एक नियंत्रण वर्ण डिग्राफ है help digraph-table:।
एरिक लेसिंस्की जूल

जवाबों:


107

^Mएक गाड़ी-रिटर्न चरित्र है। यदि आप इसे देखते हैं, तो आप संभवतः एक ऐसी फाइल को देख रहे हैं जो DOS / Windows की दुनिया में उत्पन्न हुई है, जहां एक एंड-ऑफ-लाइन एक गाड़ी रिटर्न / न्यूलाइन जोड़ी द्वारा चिह्नित है, जबकि यूनिक्स दुनिया में, एंड-ऑफ-लाइन एक नई पंक्ति द्वारा चिह्नित किया गया है।

अधिक विस्तार के लिए इस लेख को पढ़ें , और न्यूलाइन के लिए विकिपीडिया प्रविष्टि भी ।

यह आलेख विभिन्न अंत-पंक्ति मार्करों के साथ फ़ाइलों को पारदर्शी रूप से संपादित करने के लिए विम को सेट करने के तरीके पर चर्चा करता है।

यदि आपके पास ^Mकुछ लाइनों के अंत में एक फ़ाइल है और आप उनसे छुटकारा चाहते हैं, तो Vim में इसका उपयोग करें:

:s/^M$//

( इसे डालने के लिए Ctrl+ V Ctrl+ दबाएं ।)M^M


11
न्यूलाइन वर्ण :%s/^M/\r/gसे निकालने ^Mऔर बदलने के बजाय प्रयास करें । बिना , कमांड केवल वर्तमान लाइन के लिए लागू होता है। और मैं कुछ उदाहरणों के सामने आया, जहां लाइन के अंत में नहीं है, जैसे^M\r%^MThe first line.^MThe second line.
जॉर्ज

या अगर आप नहीं चाहते कि लाइन ब्रेक का भार आप बस कर सकें:%s/^M/
सावधान 1

2
यदि यह केवल एक गाड़ी है, तो यह क्लासिक (प्री-यूनिक्स) मैकिंटोश लाइन ब्रेक हो सकती है। यहां तक ​​कि मैक के लिए एक्सेल 2007 जैसे कुछ नए कार्यक्रम किसी कारण से ऐसा करते हैं।
सूदो

@larsks लेकिन altap.cz/salamander/help/salamand/appendix_txtfiles कि कहते हैं ^MUNIX में प्रयोग किया जाता है
विवेक

आपके द्वारा लिंक \nकिया गया लेख कहता है कि इसका उपयोग यूनिक्स में किया गया है, जो सही है। वह ASCII कोड है 10, अन्यथा के रूप में जाना जाता है ^J
21

39

अधिकांश UNIX ऑपरेटिंग सिस्टम में एक उपयोगिता होती है, dos2unixजो CRLF को LF में बदल देती है। अन्य उत्तर "वे क्या हैं" प्रश्न को कवर करते हैं।


36

ऐसा करने का एक सरल तरीका निम्नलिखित कमांड का उपयोग करना है:

dos2unix filename

यह कमांड पथ पैटर्न के साथ-साथ, उदाहरण के लिए काम करता है

dos2unix path/name*

यदि यह काम नहीं करता है, तो विभिन्न मोड का उपयोग करके देखें:

dos2unix -c mac filename
  • -cरूपांतरण मोड सेट करें। जहां CONVMODE इनमें से एक है: डिफ़ॉल्ट होने के ascii, 7bit, iso, macसाथ ascii

22

इसने मेरे लिए काम किया

:e ++ff=dos 

: E ++ ff = dos कमांड विम को फाइल दोबारा पढ़ने के लिए कहता है, डॉस फाइल फॉर्मेट को मजबूर करता है। विम CRLF और LF-only लाइन अंत को हटा देगा, बफर में केवल प्रत्येक पंक्ति का पाठ छोड़ देगा।

फिर

:set ff=unix 

और अंत में

:wq 

3
धन्यवाद! यह मेरे लिए काम किया लेकिन स्वीकृत समाधान नहीं किया
Bjorks नंबर एक प्रशंसक

क्या ffप्रारूप फाइल करने के लिए संदर्भित करता है? किस बारे में ++ff?
KcFnMi

: E ++ ff = dos कमांड विम को फाइल दोबारा पढ़ने के लिए कहता है, डॉस फाइल फॉर्मेट को मजबूर करता है। विम CRLF और LF-only लाइन अंत को हटा देगा, बफर में केवल प्रत्येक पंक्ति का पाठ छोड़ देगा।
स्ट्राइकर

10

कैरिज रिटर्न से छुटकारा पाने का एक और तरीका trकमांड के साथ है ।

मेरी एक छोटी सी स्क्रिप्ट है जो इस तरह दिखती है

#!/bin/sh
tmpfile=$(mktemp)
tr -d '\r' <"$1" >"$tmpfile"
mv "$tmpfile" "$1"

6

आप इसे साफ कर सकते हैं sed:

sed -e 's/^M$//' < infile > outfile

चाल है कि कैसे गाड़ी में प्रवेश करें-ठीक से लौटें। आम तौर पर, आपको C-v C-mशाब्दिक कैरिज रिटर्न दर्ज करने के लिए टाइप करना होगा। आपके साथ जगह पर sed काम भी हो सकता है

sed -i.bak -e 's/^M$//' infile

2

यह ^ म क्या है?
^ एम एक कैरिज-रिटर्न कैरेक्टर है। यदि आप इसे देखते हैं, तो आप संभवतः एक ऐसी फाइल को देख रहे हैं जो DOS / Windows की दुनिया में उत्पन्न हुई है, जहां एक एंड-ऑफ-लाइन एक गाड़ी रिटर्न / न्यूलाइन जोड़ी द्वारा चिह्नित है, जबकि यूनिक्स दुनिया में, एंड-ऑफ-लाइन एक नई पंक्ति द्वारा चिह्नित किया गया है।

यह वहां कैसे हो सकता था?
जब फ़ाइल स्वरूप में परिवर्तन होता है।

मुझे इससे छुटकारा कैसे मिलेगा?
के साथ अपनी फ़ाइल खोलें

vim -b FILE_PATH

निम्न आदेश के साथ इसे सहेजें

:%s/^M//g

आप के साथ अपने filr खुले में एक टाइपो मिल गया है ।
माटुस्स पिओत्रोस्की

4
यह उत्तर अन्य उत्तरों में कुछ भी नहीं जोड़ता है। पहला पैराग्राफ स्वीकृत उत्तर में से लगभग एक शब्दशः कॉपी है। दिए गए कोड कुछ भी नहीं बचाएंगे , लेकिन सभी लाइनों से सभी कैरिज रिटर्न वर्ण हटा दें । और मुझे यकीन नहीं है कि बाइनरी मोड में फ़ाइल खोलने से यहां कैसे मदद मिलेगी।
डब्यू

2

मेरे मामले में,

ऊपर कुछ भी काम नहीं किया, मेरे पास मेरे मैक से लिनक्स मशीन में कॉपी की गई एक सीएसवी फ़ाइल थी और मैंने उपरोक्त सभी कमांडों का उपयोग किया लेकिन कुछ भी मदद नहीं की, लेकिन नीचे से

tr "\015" "\n" < inputfile > outputfile

मेरे पास एक फाइल थी जिसमें ^ M अक्षर नीचे की तरह लाइनों के बीच सैंडविच थे

Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKT6TG,TRO_WBFB_500,Trico,CARS,Audi,A4,35 TFSi Premium,,CAAUA4TP^MB01BNKTG0A,TRO_WB_T500,Trico,

0

आप पूर्व मोड में विम का उपयोग कर सकते हैं:

ex -bsc '%s/\r//|x' file
  1. -b बाइनरी मोड

  2. % सभी लाइनों का चयन करें

  3. s विकल्प

  4. \r कैरिज रिटर्न

  5. x सहेजें और बंद करें


0

निम्नलिखित पंक्ति को अपने ~ / .vimrc में जोड़ें

command! Tounix :call Preserve('1,$s/^M//')

फिर जब आपके पास विंडोज लाइन एंडिंग्स के साथ एक फ़ाइल होती है, तो कमांड ": टौनिक्स" चलाएं।


-1

अतीत में, मैंने देखा है कि कॉन्फ़िगरेशन फ़ाइलों को भी ठीक से पार्स नहीं किया गया है और व्हॉट्सएप के बारे में शिकायत की गई है, लेकिन अगर आप vi और एक सेट सूची करते हैं तो यह व्हाट्सएप, grep फ़ाइल नाम नहीं दिखाएगा [[स्पेस]] आपको दिखाएगा: M

जब dos2unix fileमदद मिलती है


यह उत्तर कुछ नया नहीं लाता है, do2unix पहले से ही कम से कम दो उत्तरों में अधिक पुराना है।
रुई एफ रिबेरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.