【整理】如何取消Linux下,vi中顯示的^M符號
【背景知識】
^M 是ascii中的'\r', 回車符,是16進位制的0x0D,8進位制的015,十進位制的13。
對於換行這個動作,unix下一般只有一個0x0A表示換行,windows下一般都是0x0D和0x0A兩個字元。
另外:^L 是ascii 0x0C '\f', 換頁控制符。
而對於Linux 的vi,有些版本,比如我當前開發板裡面的vi,是用busybox編譯出來的,不能識別windows下面編輯的,帶0x0D的那些文字檔案,所以,你在windows下面編輯一個普通的文字檔案,如果裡面有換行,那麼在Linux的vi裡面,對應的那個0x0D就會顯示出一個^M
1. led on & off^Meg.^Mecho none > /sys/class/leds/led_green/trigger^Mecho 1 > /sys/class/leds/led_green/brightness^Mecho > /sys/class/leds/led_green/brightness^MNote: the default switch of trigger is [none]^M2. heartbeat flash^Meg.^Mecho heartbeat > /sys/class/leds/led_green/trigger^M3. timer flash^Meg.^Mecho timer > /sys/class/leds/led_green/trigger^Mecho 5 > /sys/class/leds/led_green/delay_on^Mecho 5 > /sys/class/leds/led_green/delay_off^M
每行最後都有一個^M,很是難看,所以想要去掉。
注:普通PC版本的Linux,好像可以很好地識別了,比如我的Linux伺服器,OpenSUSE下面的某個版本vi的,可以很好地顯示那些windows下面編輯的,帶0x0D的回車換行符,不能出現^M。
此外,關於ASCII字元,Linux下面有個簡要的介紹:
[[email protected] wi-fi]$man ascii
ASCII(7) Linux Programmer's Manual ASCII(7)
NAME
ascii - the ASCII character set encoded in octal, decimal, and hexadecimal
DESCRIPTION
ASCII is the American Standard Code for Information Interchange. It is a 7-bit code. Many 8-bit codes (such as ISO 8859-1, the Linux default character set) contain ASCII as their lower half. The international counterpart of ASCII is known as ISO 646.
The following table contains the 128 ASCII characters.
C program '\X' escapes are noted.
Oct Dec Hex Char Oct Dec Hex Char
------------------------------------------------------------------------
000 0 00 NUL '\0' 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
。。。。。。。。。。。
【如何消除vi中的^M】
我剛開始去用sed命令:
sed 's/^M//g' file_old > file_new
不成功,輸出的檔案,用vi開啟,還是帶^M。
後來到網上搜到了可以用的辦法,用tr命令:
tr -d "\015" < myfile.txt > myfile_new.txt
可以把符號^M(即"\015")去掉,並另存為新檔案myfile_new.txt
【後記】
根據別人的建議,知道了還有個專門的工具dos2unix和unix2dos,用於處理這方面的事情,詳情參考:
【轉】dos2unix和unix2dos命令使用
其用法很簡單,直接使用即可:
dos2unix file_name
這樣就可以把該檔案裡面的0x0D去掉了,只保留0x0A。
【引用】
1。如何取消vi中顯示的^M符號
2。Linux 下用程式新建的檔案中出現^M字元,如何消除??
http://www.linuxforum.net/forum/printthread.php?Cat=&Board=program&main=32848&type=thread
3。[請教]用vi編輯文字時出現的^M和^L代表什麼?
http://www.linuxsir.org/bbs/thread305370.html