Vi 小技巧 ( 轉換 Windows 換行 CR LF 至 Unix LF )
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 換行花式 .
以下內文出自: http://lexra.pixnet.net/blog/post/335816299-%EF%BF%AD-vi-%E5%B0%8F%E6%8A%80%E5%B7%A7-%28-%E8%BD%89%E