天天看點

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

本文是 i 春秋作家「xiehudie」表哥分享的技術文章,旨在為大家提供更多的學習方法與技能技巧,文章僅供學習參考。本套Linux進階教程共分為14章,歡迎大家前來系統學習。

前期回顧>>

第1章:通路指令行

第2章:從指令行管理檔案

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

第3章:編輯、檢視和編輯文本檔案

一、标準輸入、标準輸出和标準錯誤

一個運作的程式(或稱為程序)需要從某位置讀取輸入并輸出寫入某位置。從shell提示符運作的指令通常從鍵盤讀取其輸入,并将輸出發送到其終端端口。

程序使用稱為檔案描述符的編号通道來擷取輸入并發送輸出。所有程序在開始時至少要有三個檔案描述符。标準輸入(通道0)從鍵盤通道讀取輸入。标準輸出(通道1)将正常輸出發送到終端。标準錯誤(通道2)将錯誤消息發送到終端。如果程式打開連接配接至其他檔案的單獨連接配接,則可能要使用更大編号的檔案描述符。(程序1/0通道,如下圖所示)

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

通道(檔案描述符)如下圖所示。

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

二、将輸出重定向到檔案

1/0重定向可更改程序擷取其輸入或輸出的方式。該程序并不是從鍵盤擷取輸入,也不是将輸出和錯誤發送到終端,而是執行檔案讀取或寫入。重定向允許我們将消息儲存到通常發送給終端視窗的檔案中。或者我們也可以使用重定向來丢棄輸出或錯誤,這樣它們就不會顯示在終端上或儲存下來。

重定向stdout可以阻止程序輸出顯示在終端上。僅重定向stdout不會組織sderr錯誤消息顯示在終端上。如果檔案不存在,則會建立檔案。如果檔案确實存在,但是所需的重定向沒有附加到檔案,則該檔案的内容将被覆寫。

如果想丢棄消息,特殊檔案/del/null以靜默方式重定向到其自身的通道輸出,并且始終是空檔案。(輸出重定向操作符,如下圖所示)

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

輸出重定向示例:

1. 儲存時間戳

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

2. 将日志的最後一百行複制到另一個檔案

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

3. 将四個檔案連接配接成一個檔案

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

4. 将主目錄的隐藏檔案名和正常檔案名列出到檔案中

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

5.将輸出和生成的錯誤消息存儲在一起

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

6.将輸出和生成的錯誤附加到現有檔案

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

三、建構管道

管道是一個或多個指令的序列,用豎線字元(|)分隔。管道将第一個指令的标準輸出下一個指令的标準輸入。(如下圖所示,程序1/0傳送)

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

在某個程序輸出到終端之前,管道允許另一個程序操作和格式化該程序的輸出。為便于了解,可以這樣想象一下:資料正在通過管道從另一個程序“流”向另一個程序,并且在其流動的管道中每個指令都會略微對其做些改動。

1.管道示例:

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案
Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

2. ls指令的輸出傳送到wc -l,用于統計從1s收到的行數并将該行數顯示在終端

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

3. 在此管道中,head将輸出ls -t輸出内容的前10行,并且最終結果會重定向到一個檔案。

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

四、管道、重定向和tee指令

當重定向與管道組合時,shell會首先設定整個管道,然後重定向輸入/輸出。如果在管道的中間用了輸出重定向,則輸出将轉至檔案,而不是前往管道中的下一個指令。

tee指令客服了這個限制。在管道中,tee将其标準輸入複制到其标準輸出中,并且還将标準輸出重定向到指定為指令參數的檔案。如果我們将資料想象成流管道的水,那麼可将tee視覺化為管道中的T性接頭,它負責輸出在兩個方向上的流向。(如下圖所示,利用tee處理1/0傳送)

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

使用tee指令的管理示例:

1.将ls指令的輸出重定向到檔案,并且将輸出傳遞到less以便在終端以一次一屏的方式顯示

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案
Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

2. 在管道末尾使用tee,則可以儲存指令的最終輸出并且同時輸出到終端。

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

五、使用vim編輯檔案

Linux的一個重要設計原則是資訊和配置設定通常都存儲在基于文本的檔案中。這些檔案可以采用各種結構方式,如設定清單、類似INI的格式、結構化XML或YAML等等。但是,文本檔案的優點在于能用任何簡單的檔案編輯器進行檢視和編輯。

Linux進階教程丨第3章:編輯、檢視和編輯文本檔案

Vim管理模式:

Vim的一個不同尋常之處是它有幾個運作模式,包括指令模式、擴充模式、編輯模式和可視模式。根據具體的模式,我們可以發出指令、編輯文本或處理文本塊。

第一次打開vim時,它會以指令模式啟動,可用于導航、剪切和粘貼,以及其他文本操作。通過單字元擊鍵操作進入各個其他模式,通路特定的編輯功能:

1. 按i鍵進入插入模式,其中鍵入的所有文本将變為檔案内容。按Esc鍵傳回指令模式。

2. 按v鍵可選擇文本塊。用于進入可視模式的擊鍵操作(v、shift+v或ctrl+v)也可用于退出。

3. 按:鍵啟動擴充指令模式,可以執行的任務包括寫入檔案(進行儲存),以及退出vim編輯器等。

最低程度的基本vim工作流:

Vim具有高效的組合擊鍵操作,可進行進階編輯任務。I鍵可使vim進入插入模式。在此之後輸入的所有文本内容,直到我們退出插入模式;Esc鍵可退出插入模式,并讓vim傳回指令模式;u鍵可撤銷最近的編輯;按x鍵可删除單個字元;:w指令可寫入(儲存)檔案,并保留在指令行模式中以進行更多編輯;:wq指令可寫入(儲存)檔案并退出vim;:q!指令了退出vim,同時放棄上次寫入以來進行的所有更改。

重排現有文本:

在vim中,複制和粘貼稱為拖拉和放置,使用的指令字元是y和p,首先将光标定位到要選擇的第一個字元,然後進入可視模式。使用箭頭鍵拓展可視選擇,準備好時,按y将所選内容拖拉到記憶體中。将光标定位到新位置上,然後按p将所選内容放置到光标處。

Vim中的可視模式:

可視模式是一種突出顯示和操作文本的絕佳方式,他有三種擊鍵模式:

字元模式:v

行模式:shirt+v

塊模式:ctrl+v

字元模式可突出顯示文本塊中的句子,螢幕的底部會出現visual一詞;按v可進入可視字元模式;按shirt+v可進入行模式,螢幕底部會出現visual line一詞;可視塊模式非常适合于操作資料檔案,從光标位置,按ctrl+v可進入視覺塊,螢幕的底部會出現visual block一詞,使用箭頭可突出顯示要更改的部分。