利用tr如何移除檔案中的 ^M

URL Link http://n.sfs.tw/10906

2017-03-15 01:03:15 By 瘦河馬

如何移除檔案中的 ^M?

在linux或freebsd 中當我們用 vi/vim/cat 打開說明檔或是DOS的檔案時,有時會在檔案中或行尾發現 ^M (有開顏色顯示的話是藍色的^M) 這個符號,他並不是 '^' + 'M' 而是代表一個換行的符號 chr(13),以下是會可能會出現的符號:

Oct Dec Hex Name
000 0 0x00 NUL
001 1 0x01 SOH, Control-A
002 2 0x02 STX, Control-B
003 3 0x03 ETX, Control-C
004 4 0x04 EOT, Control-D
005 5 0x05 ENQ, Control-E
006 6 0x06 ACK, Control-F
007 7 0x07 BEL, Control-G
010 8 0x08 BS, backspace, Control-H
011 9 0x09 HT, tab, Control-I
012 10 0x0a LF, line feed, newline, Control-J
013 11 0x0b VT, Control-K
014 12 0x0c FF, form feed, NP, Control-L
015 13 0x0d CR, carriage return, Control-M
016 14 0x0e SO, Control-N
017 15 0x0f SI, Control-O
020 16 0x10 DLE, Control-P
021 17 0x11 DC1, XON, Control-Q
022 18 0x12 DC2, Control-R
023 19 0x13 DC3, XOFF, Control-S
024 20 0x14 DC4, Control-T
025 21 0x15 NAK, Control-U
026 22 0x16 SYN, Control-V
027 23 0x17 ETB, Control-W
030 24 0x18 CAN, Control-X
031 25 0x19 EM, Control-Y
032 26 0x1a SUB, Control-Z

要怎麼把他拿掉?可以使用 tr 這個命令:

NAME
       tr - translate or delete characters

參數 -d, --delete
              delete characters in SET1, do not translate
 

$ tr -d "\015"

其他的符號也可類推操作

所以假如檔案 ginzan.txt 要移除 ^M ,下指令:

$ cat ginzan.txt | tr -d '\015' > newfile.txt

參考資料

[1] http://www.computing.net/answers/unix/how-to-delete-m-character-using-vi/2451.html


原文 2010-05-11 20:01:22