2012-09-20 9 views
11

पर डॉस लाइन एंडिंग को ढूंढें और हटाएं मुझे पता चला है कि मेरी कई फाइलों में डॉस लाइन एंडिंग है। छठी में वे इस तरह दिखते हैं: "^ एम"। मैं उन फ़ाइलों को संशोधित नहीं करना चाहता जिनके पास इन डॉस लाइन समाप्ति नहीं हैं। बैश स्क्रिप्ट का उपयोग करके मैं इसे कैसे कर सकता हूं? धन्यवाद!उबंटू

ईवी

उत्तर

18
grep -URl ^M . | xargs fromdos 

ग्रेप आप वर्तमान निर्देशिका के अंतर्गत सभी फ़ाइलें है कि डॉस लाइन अंत की एक सूची हो जाता है।

-U ग्रेप लाइन अंत पर विचार के बजाय डिफ़ॉल्ट

-R से उन्हें दूर अलग करना आसान हो गया है बनाता है यह पुनरावर्ती

-l यह सूची केवल फ़ाइल नाम और नहीं मिलान लाइनों पाइपिंग

तो आप कर रहे हैं बनाता है कनवर्टर कमांड में सूचीबद्ध है (जो fromdos उबंटू, dos2unix पर है जहां से मैं आती हूं)।

नोट: वास्तव में ^M टाइप नहीं करते हैं। इसके बजाय, ^M वर्ण डालने के लिए आपको <Ctrl-V> फिर <Ctrl-M> दबाएं और grep को समझें कि आप क्या कर रहे हैं। या, आप ^M के स्थान पर $'\r' टाइप कर सकते हैं (लेकिन मुझे लगता है कि केवल बैश के लिए काम कर सकता है ...)।

+1

grep -URl^एम। | xargs fromdos? – Dalinaum

+5

स्थापना के लिए उबंटू पैकेज को "tofrodos" कहा जाता है। – Apalala

+0

tcsh पर, और शायद csh पर भी, आप 'grep -URl "\ r" के साथ समान प्रभाव प्राप्त कर सकते हैं। | xargs fromdos'। – bdesham

0

आप आदेश का उपयोग कर सकते हैं:

dos2ux file.in>file.out or: 
पर्ल में

:

perl -pi -e 's/\r//g' your_file 

वैकल्पिक रूप से आप कर सकते हैं:

  • vi में खुला
  • यदि आप मल्टी-बाइट फ़ाइलों को परिवर्तित कर रहे हैं मोड को आदेश
  • प्रकार :%s/[ctrl-V][CTRL-M]//g
0

नोट जाना आप लेने की जरूरत अतिरिक्त देखभाल, और शायद सही iconv का उपयोग करने या एन्कोडिंग विनिर्देशों से रिकोड करने का प्रयास करना चाहिए।

यदि यह एक सादा ASCII फ़ाइल है, तो निम्न दोनों विधियां काम करेंगी।

flip प्रोग्राम, डेबियन में पैकेज को flip भी कहा जाता है, जो लाइन-एंडिंग को संभाल सकता है। मैनुअल से:

When asked to convert a file to the same format that it already 
has, flip causes no change to the file. Thus to convert all 
files to **IX format you can type 

flip -u * 

and all files will end up right, regardless of whether they were 
in MS-DOS or in **IX format to begin with. This also works in the 
opposite direction. 

या आप इस्तेमाल कर सकते हैं जीएनयू recode:

< /etc/passwd recode ..pc | tee a b > /dev/null 
file a b 

आउटपुट:

a: ASCII text, with CRLF line terminators 
b: ASCII text, with CRLF line terminators 

यूनिक्स लाइन अंत में परिवर्तित करें:

recode pc.. a b 
file a b 

आउटपुट:

a: ASCII text 
b: ASCII text 

recode pc रूप abbreviates डॉस लाइन अंत है, तो pc.. साथ तर्क: डिफ़ॉल्ट रूप है, जो यूनिक्स लाइन अंत के साथ latin1 है पीसी प्रारूप से परिवर्तित करते हैं।

3

ubuntu पर, आप fromdos उपयोगिता का उपयोग

fromdos test.txt 

ऊपर के उदाहरण अलग पंक्ति विभाजक के साथ एक MS-DOS या Microsoft Windows फ़ाइल या अन्य फ़ाइल लेने के लिए और करने के लिए नई लाइन विभाजक के साथ फ़ाइल का प्रारूपण हैं लिनक्स और यूनिक्स में पढ़ा जाए।

2

एक GNU coreutils का उपयोग कर रास्ता:

< file.txt tr -d '\r' 
0

यदि आप फ़ाइल समाप्त होने

grep -URl ^M . | grep .php | xargs dos2unix 

मैं fromdos के बजाय dos2unix थे, लेकिन प्रभाव होना चाहिए के आधार पर फ़िल्टर करने की जरूरत है जीतना जवाब देने के लिए एक संशोधन वही।