在轉換 Unix-Like 系統環境中,許多先前在 MS-Windows 系統所產生出的純文字文件,其斷行字符在 Unix-Like 環境下,總是會出現令人討厭的 ^M 符號,若是想要利用文書編輯器來刪除,光是想到那無數的斷行,心就馬上冷了下來。
當然了,不論是在 Linux 或是 FreeBSD 甚至 Windows 都有了 dos2unix 及 unix2dos 這兩樣斷行字符的轉換工具,不過這些都是要另行安裝的 -- 部份 Linux 發行套件可能會預先安裝??
在此另行提供於 FreeBSD 下,如何進行修改斷行字符的方法︰
- 提醒您︰^M 斷行字符是要利用按鍵 Ctrl+V+M 來產生喲!!
- cat <filename1> | tr -d "^V^M" > <newfile>
- sed -e "s/^V^M//" <filename> > <output filename>
- col < infile > outfile
提醒您︰使用 col 指令時,切記 infile 與 outfile 不可為同一檔案,不然該檔案的內容將會完全消失喲!! - 使用 vi 打開要編輯的檔案後︰
- 按下 Esc 按鍵
- 接著按下 :%s/^V^M//
- 再按下 :wq 存檔離開
- 如果您的系統中有安裝 perl
perl -pi -e "s:^V^M::g" <filenames> - 最後,安裝 unix2dos 軟體套件
- cd /usr/ports/converters/unix2dos && sudo make install clean
- 指令格式︰
dos2unix [-p] filename -> dos 格式轉換成 unix 格式
unix2dos [-p] filename -> unix 格式轉換成 dos 格式
選項 -p 是保留檔案的原本時刻不變動
因為於 shell 中,輸入 Ctrl+M 是會造成斷行的現象,所以上述的方法如有需要輸入 ^V^M 的指令,需先將其寫成 shell script 的指令稿,再利用此指令稿來進行斷行字符的轉換,如果直接使用複製本文中的 ^V^M 或 ^M 然後貼上使用,是不會有任何結果的。
所以,如果是想要採用直接指令模式的話,那建議使用 col < infile > outfile 指令來做斷行字符的修正,不過這只適用於 DOS 格式轉換為 Unix 格式;如果希望能夠任意轉換,且又能夠保留檔案的原始時刻的話,那就無論如何都得要安裝 unix2dos 軟體套件嘍!
若是不介意檔案的時間會變動,而且不想或不方便安裝 unix2dos 軟體套件,同時又想能夠依據需求任意轉換斷行格式的話,那就無論如何需針對喜好的指令來撰寫 shell script 指令稿了。再說,如果將 shell script 寫得較有彈性一點的話,無論是單個檔案或是大量檔案的斷行格式轉換就可一次解決嘍 ^_^
參考來源︰ The FreeBSD Diary



