VI 很重要; 常在 Unix / Linux 使用 vi 操作的人, 應該經常遇到這 Windows (DOS) 換行符號; 用 vi 編輯器看到的是 每一行的最後總有個 ^M , 如下:
# vi ./rom.java
package com.example.menu;^M ^M /**^M * Created by LEXRA on 2017/6/23.^M */^M ^M public class rom {^M int Start;^M int Length;^M String Domestic;^M String Overseas;^M String Path;^M byte [] Header;^M ^M rom() {^M Start = -1;^M Length = 0;^M }^M }^M
使用 Sed
我要介紹的是 vi 小技巧, 而非 DOS 至 UNIX 換行格式的轉換. 使用 sed 可以達到此目的.
# sed 's/^M//g' ./rom.java ...
# sed 's/^M//g' ./rom.java > ./rom.java
上述命令單引號之內:
s 是取代的意思
反斜線之內 / ABC / XYZ / 是 以 XYZ 替換 ABC ; 反斜線之內是正規表示式 (Regular Expression) .
^M 是 CR
g 是 global 的意思 ; 如果這一行有多的 match, 所有的 match 都替換.
使用 Vi 轉換 Windows 換行 CR LF 至 Unix LF
使用 Vi 轉換 Windows CR LF 至 Unix LF, 你需要的是下列 vi 命令: 1,$ s/^M//g
1,$ s/^M//g
1 是第一行.
$ 是最後一行. 1,$ 合起來就是檔案全部.
s 是取代的意思
反斜線之內 / ABC / XYZ / 是 以 XYZ 替換 ABC ; 反斜線之內是正規表達式.
^M 是 CR 的意思
g 是 global 的意思 ; 如果這一行有多的 match, 所有的 match 都替換.
問題來了, 在 vi 命令列中如何輸入 ^M 呢? 答案是由 "Ctrl+V" 以及 "Ctrl+M" 來完成.
package com.example.menu;^M ^M /**^M * Created by LEXRA on 2017/6/23.^M */^M ^M public class rom {^M int Start;^M int Length;^M String Domestic;^M String Overseas;^M String Path;^M byte [] Header;^M ^M rom() {^M Start = -1;^M Length = 0;^M }^M }^M ~ ~ ~ ~ :1,$ s/^M//g
轉換完成之後存檔即可. 如何? 還不賴吧? 重點兒在於這 vi 的小技巧而不在於 0D 0A 轉換為 OA .
package com.atgames.menu.hal; /** * Created by LEXRA on 2017/6/23. */ public class rom { int Start; int Length; String Domestic; String Overseas; String Path; byte [] Header; rom() { Start = -1; Length = 0; } } ~ ~ ~ ~ :wq
使用 NotePad
在 Windows 作業系統中, 我們可以使用 Notepad 編輯器 轉換 Windows 換行格式 或是 Unix 換行格式 .
留言列表