在用電報通訊的年代,人們發明了一種用7bits把常用的英文和標點編碼的方法 — 這就是至今還在電腦世界應用的ASCII。
電報機每當打印到一行結尾時便需要「跳進下一行」並「回到第一格」,因此ASCII有LF(Line Feed, 0×0A) 和CR(Carriage Return, 0×0D)。在電腦的世其實並不需要用兩個字符代表「下一行」的意思,為了省資源,在設計OS時一些人就決定用其中一個字符代表「下一行」1,因為大家選擇不同,做成了不同系統的「下一行」符號不同的問題。
這問題常見於在 Windows 上傳一些檔案到 Unix Server 中,如果不經轉換 Unix 會見到一些古怪符號 (顯示成^M的CR字符)。如果己經有一堆Windows的文字檔,怎樣把它們轉換成Unix的文字檔?不用自己寫轉換軟件,你可以使用Unix command tr (translate) 或 sed (Stream Editor):
# USE tr TO REMOVE CR CHARACTERtr -d '/r' < oldfile > newfile
# USE sed, IN UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix formatsed 's/.$//' # assumes that all lines end with CR/LFsed 's/^M$//' # in bash/tcsh, press Ctrl-V then Ctrl-M
# USE sed, IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS formatsed "s/$/`echo -e ///r`/" # command line under kshsed 's/$'"/`echo ///r`/" # command line under bash