1. 程式人生 > >【整理】如何取消Linux下,vi中顯示的^M符號

【整理】如何取消Linux下,vi中顯示的^M符號

【整理】如何取消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