Linux 文字編輯

vi 文字編輯器

介紹

在大多數的 Linux 發行版中,許多服務都需要透過編輯設定檔來正確運作,因此學習一套順手的文字編輯器,能大幅提升系統管理效率。

vi 是歷史悠久且幾乎所有 Linux/Unix 系統皆內建的文字編輯器。熟悉 vi 不僅能在 Linux 上使用,也能應用於 *BSD、macOS 等作業系統。

vi 常用功能包含:

  • 文字編輯
  • 游標移動
  • 存檔
  • 文字搜尋
  • 離開

vi 有三個主要操作模式:

  • 一般模式(Normal mode):控制游標、刪除複製貼上、進入其他模式
  • 編輯模式(Insert mode):開始輸入文字
  • 指令模式(Command mode):輸入以 : 開頭的指令進行存檔、離開等操作

所有模式皆可按下 [ESC] 鍵回到一般模式。


一般模式(Normal mode)

在此模式中可進行游標移動與文字操作:

游標移動指令:

功能 按鍵
游標往上 k
游標往下 j
游標往左 h
游標往右 l
移至第 1 行 1G
移至第 5 行 5G
移至第 n 行 nG
移至最後一行 G
行首 ^
行尾 $

文件操作指令:

功能 按鍵
複製一行 yy
複製 n 行 nyy
在下一行貼上 p
在上一行貼上 P
剪下一個字元 x
剪下 n 個字元 nx
刪除一整行 dd
刪除 n 行 ndd

編輯模式(Insert mode)

從一般模式切換到編輯模式可使用下列指令:

功能 按鍵
於游標所在位置開始編輯 i
於游標下一字元開始編輯 a
在當前行下方新增一行並編輯 o
在當前行上方新增一行並編輯 O

在編輯模式中,按 [ESC] 可回到一般模式。


指令模式(Command mode)

在一般模式中輸入 : 進入指令模式,常用指令如下:

功能 指令
存檔 :w
離開 :q
存檔並離開 :wq
強制離開不存檔 :q!
強制存檔 :w!
尋找字串 /字串

注意事項

vi 開啟檔案時,會建立一個暫存的交換檔(swap file)。正常關閉 vi 時該檔會被移除。但若非正常關閉(如斷電、kill process),則該檔案會保留,之後再次開啟原檔案會收到提示訊息。


串流編輯:sed 與 awk

正規表示式基本語法

表達式 意義
^ 行開頭,如 ^abc 表示以 abc 開頭
$ 行結尾,如 abc$ 表示以 abc 結尾
[a-z] a 到 z 任一字元
* 出現 0 次或多次,如 a*
\{3,5\} 出現 3 至 5 次
\(abc\) 群組,比對完整字串 abc

sed

sed(Stream Editor)是用於處理文字資料流的工具,適合快速取代、刪除、插入等操作,並可配合正規表示式使用。

基本語法

sed '樣式命令' 檔案

範例:

# 刪除空白行
sed '/^$/d' file.txt

# 同時執行多個命令
sed -e '1d' -e '3d' file.txt

# 將 ab 替換為 fg,並修改檔案本身(需有權限)
sed -i 's/ab/fg/g' file.txt

awk

awk 是文字資料處理工具,適合處理具欄位結構的檔案(例如 CSV)。可指定欄位分隔字元,預設使用空白或 [Tab]。

基本語法

awk -F '分隔符號' '樣式 {動作}' 檔案

範例:

檔案內容(awk_sample.txt):

1,steven,新北市
2,bob,高雄市
3,jason,台中市
# 取出第 2 欄位(以逗號分隔)
awk -F ',' '{print $2}' awk_sample.txt

輸出:

steven
bob
jason