2013-02-22 58 views
6

मैं एक यूनिक्स खोल स्क्रिप्ट जो निम्नलिखित करता है के अंत में संलग्न कर देता है^एम:यूनिक्स स्क्रिप्ट प्रत्येक पंक्ति

  1. एक फ़ाइल
  2. का बैकअप बनाता है एक फ़ाइल
के लिए कुछ पाठ संलग्न कर देता है

अब # 2 में यदि मैं एक टेक्स्ट डालता हूं,^एम फ़ाइल की सभी पंक्तियों पर संलग्न हो जाता है।

echo " a" >> /cust/vivek.txt 
echo " b" >> /cust/vivek.txt 

vi vivek.txt 
abc^M 
bcd^M 
a^M 
b^M 

किसी भी तरह से इस से बचने के लिए:

उदाहरण के लिए

?

धन्यवाद,

विवेक

+0

हमें बताएंगे कि कैसे पाठ स्क्रिप्ट –

+3

द्वारा दायर करने के लिए आप Windows मशीन पर इस फ़ाइल को बनाया था जोड़ दिया जाता है और उसके बाद यूनिक्स/लिनक्स मशीन पर यह स्थानांतरित कर दिया? एमएस-डॉस और लिनक्स/यूनिक्स वातावरण में रेखा का अंत अलग-अलग व्याख्या किया जाता है। एमएस-डॉस पर, लाइन के अंत को नए लाइन चरित्र और कैरिज रिटर्न द्वारा इंगित किया जाता है, जबकि यूनिक्स पर, नई लाइन फीड लाइन के अंत को इंगित करती है। यह^एम वर्णों का कारण बनता है, यदि आप एमएस-डॉस और यूनिक्स/लिनक्स – Incognito

+0

के बीच स्थानांतरण मोड के बारे में सावधान नहीं हैं, तो मैंने केवल मूल फ़ाइल को विंडोज मशीन से कॉपी किया है, अब इसे हल करने के किसी भी तरीके से? –

उत्तर

8

मुझे यकीन है कि कैसे echo^M पात्रों का निर्माण हो सकता है नहीं कर रहा हूँ, लेकिन आप अपनी फ़ाइल पर dos2unix चलाकर उन्हें निकाल सकते हैं इस तरह:

dos2unix /cust/vivek.txt 
+0

बहुत बहुत धन्यवाद, डॉस 2unix चाल है –

+0

कभी भी dos2unix के बारे में नहीं पता था, मेरे लिए एक आकर्षण की तरह काम किया! चीयर्स – ConMan

+1

'echo -e" \ r "' ऐसे –

2

मैं इस संयोजन अपने vi सेटिंग्स की एक विरूपण साक्ष्य के बजाय हो सकता है संदेह है।

क्या

cat -v -e filename 

दिखाती है? यह आदेश आपकी फ़ाइल को डंप कर देगा और नियंत्रण वर्णों को चिह्नित करेगा, इसलिए यह स्पष्ट है कि आपकी फ़ाइल में वास्तव में क्या है। this Superuser question/answer set भी देखें।

+0

-v = एलएफडी और टैब को छोड़कर,^और एम-नोटेशन का उपयोग करें; -E = प्रत्येक पंक्ति के अंत में $ प्रदर्शित करें; -e = समकक्ष -vE; तो -v -e = -v -vE; रिडंडेंट? क्या हमें "-v -e" के बजाय "-e" का उपयोग नहीं करना चाहिए? –

3

^M एक गाड़ी वापसी है, और आमतौर पर जब फ़ाइलें देखा जाता है विंडोज से कॉपी की गई हैं। उपयोग करें:

od -xc filename 

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

dos2unix या sed 's/\r//' file > file.new

+0

उत्पन्न करता है धन्यवाद dos2unix मदद मिली) –

2

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

dos2unix कमांड इसे ठीक कर सकता है।

dos2unix <filename>