RHCSA 系列(四): 編輯文本文件及分析文本
![](https://linuxstory.org/wp-content/uploads/2024/06/231442zmaexaxjqn7exmzn.png)
RHCSA: 使用 Nano 和 Vim 編輯文本文件 – Part 4
使用 Nano 編輯器來編輯文件
要啟動 nano,你可以在命令提示符下輸入 nano
,或可選地跟上一個文件名(在這種情況下,若文件存在,它將在編輯模式中被打開)。若文件不存在,或我們省略了文件名, nano 也將在編輯模式下開啟,但將為我們開啟一個空白屏以便開始輸入:
Nano 編輯器
正如你在上一張圖片中所見的那樣, nano 在屏幕的底部呈現出一些可以通過指定的快捷鍵來觸發的功能(^,即插入記號,代指 Ctrl 鍵)。它們中的一些是:
- Ctrl + G: 觸發一個幫助菜單,帶有一個關於功能和相應的描述的完整列表;
Nano 編輯器幫助菜單
- Ctrl + O: 保存更改到一個文件。它可以讓你用一個與源文件相同或不同的名稱來保存該文件,然後按 Enter 鍵來確認。
Nano 編輯器的保存更改模式
- Ctrl + X: 離開當前文件,假如更改沒有被保存,則它們將被丟棄;
- Ctrl + R: 通過指定一個完整的文件路徑,讓你選擇一個文件來將該文件的內容插入到當前文件中;
Nano: 插入文件內容到主文件中
上圖的操作將把 /etc/passwd
的內容插入到當前文件中。
- Ctrl + K: 剪切當前行;
- Ctrl + U: 粘貼;
- Ctrl + C: 取消當前的操作並返回先前的屏幕;
為了輕鬆地在打開的文件中瀏覽, nano 提供了下面的功能:
- Ctrl + F 和 Ctrl + B 分別先前或向後移動游標;而 Ctrl + P 和 Ctrl + N 則分別向上或向下移動一行,功能與箭頭鍵相同;
- Ctrl + space 和 Alt + space 分別向前或向後移動一個單詞;
最後,
- 假如你想將游標移動到文檔中的特定位置,使用 Ctrl + _ (下劃線) 並接著輸入 X,Y 將準確地帶你到 第 X 行,第 Y 列。
在 nano 中定位到具體的行和列
上面的例子將帶你到當前文檔的第 15 行,第 14 列。
假如你可以回憶起你早期的 Linux 歲月,特別是當你剛從 Windows 遷移到 Linux 中,你就可能會同意:對於一個新手來說,使用 nano 來開始學習是最好的方式。
使用 Vim 編輯器來編輯文件
Vim 是 vi 的加強版本,它是 Linux 中一個著名的文本編輯器,可在所有兼容 POSIX 的 *nix 系統中獲取到,例如在 RHEL 7 中。假如你有機會並可以安裝 Vim,請繼續;假如不能,這篇文章中的大多數(若不是全部)的提示也應該可以正常工作。
Vim 的一個出眾的特點是可以在多個不同的模式中進行操作:
- 命令模式 將允許你在文件中跳轉和輸入命令,這些命令是由一個或多個字母組成的簡潔且大小寫敏感的組合。假如你想重複執行某個命令特定次數,你可以在這個命令前加上需要重複的次數(這個規則只有極少數例外)。例如,
yy
(或Y
,yank 的縮寫)可以複製整個當前行,而4yy
(或4Y
)則複製整個從當前行到接下來的 3 行(總共 4 行)。 - 我們總是可以通過敲擊
Esc
鍵來進入命令模式(無論我們正工作在哪個模式下)。 - 在 末行模式 中,你可以操作文件(包括保存當前文件和運行外部的程序或命令)。要進入末行模式,你必須從命令模式中(換言之,輸入
Esc
+:
)輸入一個冒號(:
),再直接跟上你想使用的末行模式命令的名稱。 - 對於 插入模式 ,可以輸入字母
i
進入,然後只需要輸入文字即可。大多數的擊鍵結果都將出現在屏幕中的文本中。
現在,讓我們看看如何在 vim 中執行在上一節列舉的針對 nano 的相同的操作。不要忘記敲擊 Enter 鍵來確認 vim 命令。
為了從命令行中獲取 vim 的完整手冊,在命令模式下鍵入 :help
並敲擊 Enter 鍵:
vim 編輯器幫助菜單
上面的部分呈現出一個內容列表,這些定義的小節則描述了 Vim 的特定話題。要瀏覽某一個小節,可以將游標放到它的上面,然後按 Ctrl + ]
(閉方括弧)。注意,底部的小節展示的是當前文件的內容。
1、 要保存更改到文件,在命令模式中運行下面命令中的任意一個,就可以達到這個目的:
:wq!
:x!
ZZ (是的,兩個 ZZ,前面無需添加冒號)
2、 要離開並丟棄更改,使用 :q!
。這個命令也將允許你離開上面描述過的幫助菜單,並返回到命令模式中的當前文件。
3、 剪切 N 行:在命令模式中鍵入 Ndd
。
4、 複製 M 行:在命令模式中鍵入 Myy
。
5、 粘貼先前剪貼或複製過的行:在命令模式中按 P
鍵。
6、 要插入另一個文件的內容到當前文件:
:r filename
例如,插入 /etc/fstab
的內容,可以這樣做:
在 vi 編輯器中插入文件的內容
7、 插入一個命令的輸出到當前文檔:
:r! command
例如,要在游標所在的當前位置後面插入日期和時間:
在 vi 編輯器中插入時間和日期
在另一篇我寫的文章中,(LFCS 系列(二)),我更加詳細地解釋了在 vim 中可用的鍵盤快捷鍵和功能。或許你可以參考那個教程來查看如何使用這個強大的文本編輯器的更深入的例子。
使用 grep 和正則表達式來分析文本
到現在為止,你已經學習了如何使用 nano 或 vim 創建和編輯文件。打個比方說,假如你成為了一個文本編輯器忍者 – 那又怎樣呢? 在其他事情上,你也需要知道如何在文本中搜索正則表達式。
正則表達式(也稱為 "regex" 或 "regexp") 是一種識別一個特定文本字元串或模式的方式,使得一個程序可以將這個模式和任意的文本字元串相比較。儘管利用 grep 來使用正則表達式值得用一整篇文章來描述,這裡就讓我們複習一些基本的知識:
1、 最簡單的正則表達式是一個由數字和字母構成的字元串(例如,單詞 "svm") ,或者兩個(在使用兩個字元串時,你可以使用 |
(或) 操作符):
# grep -Ei 'svm|vmx' /proc/cpuinfo
上面命令的輸出結果中若有這兩個字元串之一的出現,則標誌著你的處理器支持虛擬化:
正則表達式示例
2、 第二種正則表達式是一個範圍列表,由方括弧包裹。
例如, c[aeiou]t
匹配字元串 cat、cet、cit、cot 和 cut,而 [a-z]
和 [0-9]
則相應地匹配小寫字母或十進位數字。假如你想重複正則表達式 X 次,在正則表達式的後面立即輸入 {X}
即可。
例如,讓我們從 /etc/fstab
中析出存儲設備的 UUID:
# grep -Ei '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}' -o /etc/fstab
從一個文件中析出字元串
方括弧中的第一個表達式 [0-9a-f]
被用來表示小寫的十六進位字元,{8}
是一個量詞,暗示前面匹配的字元串應該重複的次數(在一個 UUID 中的開頭序列是一個 8 個字元長的十六進位字元串)。
在圓括弧中,量詞 {4}
和連字元暗示下一個序列是一個 4 個字元長的十六進位字元串,接著的量詞 ({3})
表示前面的表達式要重複 3 次。
最後,在 UUID 中的最後一個 12 個字元長的十六進位字元串可以由 [0-9a-f]{12}
取得, -o
選項表示只列印出在 /etc/fstab
中匹配行中的匹配的(非空)部分。
3、 POSIX 字元類
字元類 | 匹配 … |
---|---|
[:alnum:] |
任意字母或數字 [a-zA-Z0-9] |
[:alpha:] |
任意字母 [a-zA-Z] |
[:blank:] |
空格或製表符 |
[:cntrl:] |
任意控制字元 (ASCII 碼的 0 至 32) |
[:digit:] |
任意數字 [0-9] |
[:graph:] |
任意可見字元 |
[:lower:] |
任意小寫字母 [a-z] |
[:print:] |
任意非控制字元 |
[:space:] |
任意空格 |
[:punct:] |
任意標點字元 |
[:upper:] |
任意大寫字母 [A-Z] |
[:xdigit:] |
任意十六進位數字 [0-9a-fA-F] |
[:word:] |
任意字母,數字和下劃線 [a-zA-Z0-9_] |
例如,我們可能會對查找已添加到我們系統中給真實用戶的 UID 和 GID(參考「RHCSA 系列(二): 如何進行文件和目錄管理」來回憶起這些知識)感興趣。那麼,我們將在 /etc/passwd
文件中查找 4 個字元長的序列:
# grep -Ei [[:digit:]]{4} /etc/passwd
在文件中查找一個字元串
上面的示例可能不是真實世界中使用正則表達式的最好案例,但它清晰地啟發了我們如何使用 POSIX 字元類來使用 grep 分析文本。
總結
在這篇文章中,我們已經提供了一些技巧來最大地利用針對命令行用戶的兩個文本編輯器 nano 和 vim,這兩個工具都有相關的擴展文檔可供閱讀,你可以分別查詢它們的官方網站(鏈接在下面給出)以及使用「RHCSA 系列(一): 回顧基礎命令及系統文檔」中給出的建議。
參考文件鏈接
via: http://www.tecmint.com/rhcsa-exam-how-to-use-nano-vi-editors/
作者:Gabriel Cánepa 譯者:FSSlc 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive