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

 

unix2dos_notepad.gif

 

 

 

 

 

 

 

 

 

 

arrow
arrow
    文章標籤
    vi sed
    全站熱搜

    Lexra 發表在 痞客邦 留言(0) 人氣()