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 換行格式 .
