91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

sed和gawk編輯器怎么用

發布時間:2021-12-16 17:02:06 來源:億速云 閱讀:209 作者:小新 欄目:大數據

這篇文章給大家分享的是有關sed和gawk編輯器怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

sed 編輯器可以在讀取數據時對數據快遞的進行各種處理操作,s 命令 可以替換文本,i 命令 可以插入文本,a 命令 可以追加文本,c 命令 可以修改文本,d 命令 可以刪除文本,y 命令 可以轉換文本,p 命令 可以打印文本,= 命令 可以打印行號,l 命令 可以打印 ASCII 字符,w 命令 可以輸出內容到指定文件,r 命令 可以從指定文件讀取內容。
sed 編輯器還支持 行尋址 ,以上大部分命令都支持使用行尋址的方式來靈活操作數據。

gawk 編輯器是根據 awk 工具從 Unix 移植到 Linux 的 GNU 版本,雖然功能強大,但 Linux 默認沒有安裝該工具,可以通過 yum install gawk 命令進行安裝。gawk 編輯器提供的是一種編程語言,而不僅僅是編輯器命令。

19.1 文本處理

sed 和 gawk 實現的效果是:不進入交互式編輯器,就可以實現自動格式化、插入、修改或刪除文件中的文本數據。

19.1.1 sed 編輯器

sed 編輯器簡稱 流編輯器( Stream Editor ) 。可以根據命令來處理數據流中的數據,這些命令可以直接從命令行輸入,也可以存在于指定文件中。

sed 編輯器會將所有命令與一行數據進行匹配,匹配完畢后就自動讀取下一行數據,并重復之前的操作,當所有數據都讀取完畢后,命名才會終止。處理后的數據不會影響原文件,而是輸出到 STDOUT 。

sed 命令的基本格式是 sed option script file 。
option 中可用的選項如下圖:

sed和gawk編輯器怎么用

19.1.1.1 在命令行定義編輯器命令

默認情況下,sed 編輯器會將指定的命令應用到 STDIN 上,這樣就可以直接將數據通過管道輸入到 sed 編輯器中進行處理,效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,echo 輸出的語句通過 | 管道傳入 sed 命令。在 sed 編輯器中使用了 s 命令,作用是用斜線之間指定的第二個文本替換第一個文本的內容。

19.1.1.2 在命令行使用多個編輯器命令

要在 sed 編輯器的命令行模式中指定多個命令,使用 sed -e 命令即可,效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,添加 -e 指令后,只需要在多個命令之間使用分號隔開即可。需要注意的是,分號和命令末尾之間不能有空格。

如果不想使用分號,也可以使用 bash shell 的 次提示符 來分隔命令,效果如下:

sed和gawk編輯器怎么用

在這種模式下,不需要在命令末尾添加分號。

19.1.1.3 從文件中讀取編輯器命令

使用 sed -f 命令即可從文件中讀取命令,效果如下:

sed和gawk編輯器怎么用

在這種模式下,不需要在命令末尾添加分號。需要注意的是,.sed 后綴并不是強制的,只是為了避免 sed 編輯器的腳本文件和其他文件混淆。

19.1.2 gawk 編輯器

gawk 編輯器可以提供一個類編程環境,讓修改和重新組織文件中的數據變的更得心應手。
Linux 中默認沒有安裝 gawk 編輯器,如果當前 Linux 中不存在該編輯器,需要使用 yum install gawk 命令進行安裝。

使用 yum info gawk 命令可以查看該編輯器的詳細信息,源:installed 表示該編輯器已經安裝到當前 Linux 中。

sed和gawk編輯器怎么用

也可以使用 whereis gawk 命令來查看當前 Linux 中是否存在該編輯器。

sed和gawk編輯器怎么用

gawk 編輯器是 Unix 中 awk 編輯器的 GNU 版本,該編輯器提供的是一種編程語言,而不僅僅是編輯器命令。
gawk 編輯器的強大之處在于可以編寫腳本,通過腳本來讀取文本行的數據,對數據進行處理后再顯示數據,以及創建任意類型的輸出報告。

19.1.2.1 gawk 命令格式

gawk 編輯器的基本格式是 gawk option '{program}' file  ,編輯器腳本必須使用單引號和花括號包裹。
option 中可用的選項如下圖:

sed和gawk編輯器怎么用

19.1.2.2 從命令行讀取腳本

默認情況下,gawk 編輯器從 STDIN 中接收數據,效果如下:

sed和gawk編輯器怎么用

當 gawk 命令接收到通過管道傳入的 echo 命令的輸出后,就在控制臺打印了 Hello World 語句。

如果直接在命令行中執行 gawk 命令,那么該命令會一直等待用戶輸入,效果如下:

sed和gawk編輯器怎么用

從上圖中可以看到,第一次執行 gawk 命令后,手動輸入 1 并回車,控制臺打印了 Hello World 語句,再次輸入 2 并回車,控制臺再次打印了 Hello World ,以此類推。只要不手動退出,gawk 編輯器會一直監聽用戶輸入。

在第一次執行 gawk 命令的最后,可以清楚看到是使用 Ctrl + C 強制退出了 gawk 編輯器。其實該編輯器本身支持使用 Ctrl + D 退出監聽,可以看到,第二次執行 gawk 命令的最后,編輯器退出后并沒有顯示 Ctrl + C 的按鍵痕跡,因為這里正確使用了 Ctrl + D 來退出 gawk 編輯器。

19.1.2.3 使用數據字段變量

gawk 編輯器在處理文件數據時,會自動為 被字段分隔符分隔后的每個數據 分配一個變量,規則如下:

  •  $0 表示整個文本行

  • $1 表示第一個數據字段

  • $2 表示第二個數據字段

  •  以此類推

 gawk 默認的 字段分隔符 是 任意的空白字符 ,例如空格或制表符,效果如下

sed和gawk編輯器怎么用

從上圖中可以看到,每行數據中存在一個空格,通過該空格將每行的數據分為兩部分,gawk 編輯器使用 $1 成功獲取到每行的第一部分,并將其輸出。

可以使用 gawk -F 來修改字段分隔符,效果如下:

sed和gawk編輯器怎么用

上圖中使用 gawk -F : 命令將字段分隔符替換成了冒號,然后輸出了 passwd 文件中每行的第一個字段。由于輸出內容過多,將輸出內容通過管道傳入 tail -n 5 命令,最后只輸出 5 行數據。

19.1.2.4 在腳本中使用多個命令

gawk 編輯器允許將多個命令組合成一個完整的編輯器,和 sed 編輯器類似,對于多命令使用分號分隔即可,效果如下:

sed和gawk編輯器怎么用

從上圖中可以看到,gawk 編輯器先將第三個字段改為 not is ,再使用 print $0 命令將整行數據輸出。

同樣的,也支持使用 次提示符 來編寫多個命令,效果如下:

sed和gawk編輯器怎么用

19.1.2.5 從文件中讀取腳本

gawk 編輯器允許將腳本存儲到文件中,效果如下:

sed和gawk編輯器怎么用

從上圖中可以看到,在腳本中編寫多個命令非常方便,同時腳本命令外只需要使用花括號進行包裹,不再需要使用單引號

19.1.2.6 在處理數據之前運行腳本

gawk 編輯器可以控制腳本命令的運行時機。默認情況下,腳本命令會在讀取一行文本后就自動執行一次。但可以通過 BEGIN 關鍵字 強制 gawk 在讀取數據之前執行指定腳本。 ,效果如下:

sed和gawk編輯器怎么用

從上圖中可以看到,默認情況下,gawk 命令會在監聽到用戶輸入后再輸出 Hello World 。但當使用 BEGIN 關鍵字后,gawk 命令直接就輸出了 Hello World ,不再等待用戶輸入。

通過這種方式,可以為輸出內容準備一個通用的顯示頭信息,效果如下:

sed和gawk編輯器怎么用

19.1.2.7 在處理數據后運行腳本

使用 END 關鍵字可以強制 gawk 在讀取數據結束之后執行指定腳本,效果如下:

sed和gawk編輯器怎么用

19.1.2.8 通過 FS 變量指定字段分隔符

如果是在文件中編寫腳本,可以使用特殊變量 FS 來指定字段分隔符,效果如下:

sed和gawk編輯器怎么用

在上圖中,BEGIN 關鍵字部分的輸出內容沒有顯示出來,知道是為什么嗎?

因為最后將輸出通過管道傳入了 tail -n 5 命令,該命令的效果是輸出最后 5 行數據,所以最開始輸出的內容也沒無法顯示了,這并不是腳本 BUG 。

19.2 sed 編輯器基礎

介紹一些常用的 sed 命令。

19.2.1 更多的替換選項

通過一些選項,讓 s 命令 在替換文本時操作更靈活。

19.2.1.1 替換標記

默認情況下,在執行替換命令時,只會替換每行出現的第一個匹配項,如果每行有超過一個匹配項,那么后續的都會被忽略,效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,目標文本中每行都有兩個 test ,sed 命令希望將 test 替換成 trail ,但命令執行后,每行都只有第一個 test 被替換了,后續的 test 沒有發生變化。

如果添加 替換標記 ,有一種方式可以解決上述情況。首先了解一下替換標記的四種可用方式:

sed和gawk編輯器怎么用

在上述方式中,第二種標記又被叫做全局替換,效果如下:

sed和gawk編輯器怎么用

從上圖中可以看到,指定文件中,所有的 test 都被替換成了 trail 。

第一種方式是通過數字標記,指定要替換的匹配項,效果如下:

sed和gawk編輯器怎么用

第三種方式是將被替換行的內容打印出來,效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,使用 sed 命令后的替換目標是 second 字段,該字段只有第二行數據存在一次匹配。當第一次使用該命令后,將所有被掃描的行都進行輸出。當第二次在替換命令某位替換 p 標記 后,在所有被掃描的行都輸出后,再次輸出了被替換內容的第二行,這就是 p 標記 的效果。

所以在使用該命令時一般會攜帶 sed -n 命令,-n 選項可以屏蔽 sed 命令默認的輸出內容,結合 p 標記 的效果,就可以只顯示被替換內容的行,如上圖第三次的效果。

第四種方式是將被替換內容的行輸出到指定文件,效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,命令執行完成后,查看 result.txt 的內容就是被替換內容的第二行。

19.2.1.2 替換字符

在 sed 命令中替換內容時,如果部分內容涉及到敏感字符,例如本身就要作為替換操作分隔符的 正斜線( / ) ,那么操作起來就非常麻煩,效果如下:

sed和gawk編輯器怎么用

這個時候其實可以指定其他字符來作為替換操作的分隔符,例如 感嘆號( ! ) ,效果如下:

sed和gawk編輯器怎么用

19.2.2 使用地址

默認情況下,sed 命令會作用到指定數據的所有行。如果想讓命令作用于特定行或某些行,就需要用到 行尋址( Line Addressing ) 。
在 sed 編輯器中有兩種行尋址方式:
* 通過數字形式指定行區間
* 通過文本模式過濾指定行

19.2.2.1 數字形式的行尋址

sed 編輯器會將目標文本的第一個編號為 1 ,第二行編號為 2 ,以此類推。在使用數字形式的行尋址時,有以下三種方式可選:
1. 2s ,表示單個只影響第二行
2. 2,3s ,表示影響第二到第三行
3. 2,$s ,表示從第二行開始,一直到最后一行都受影響,美元符號( $ ) 表示最后一行

第一種形式的效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,只有第二行數據發生了變化。

第二種形式的效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,第二行和第三行的數據都發生了變化。

第三種形式的效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,從第二行開始一直到最后一行的數據都發生了變化。

19.2.2.2 使用文本模式過濾器

sed 編輯器允許對存在指定文本的行進行內容替換,效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,sed 命令首先在目標文本中找到 asing1elife 存在的行,然后將該行的 My 替換成 He ,而其他不存在 asing1elife 的行則不受影響。

該模式如果結合正則表達式,將會發揮更強大的威力。

19.2.2.3 命令組合

如果希望在單行執行多個命令,使用 花括號 在 多行模式 下將多個命令進行包裹即可,效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,sed 命令首先指定了受影響的行數是第二行,然后在第二行中進行了兩次替換。

19.2.3 刪除行

使用 d 命令 可以刪除 尋址模式匹配到的指定行,d 命令 的尋址模式和 s 命令 的規則一致。
該命令需要注意以下兩點:
1. 只影響流輸出,不會影響原文件
2. 必須加入尋址模式,否則流輸出的所有數據都會被刪除

指定單行的效果如下:

sed和gawk編輯器怎么用

指定多行的效果如下:

sed和gawk編輯器怎么用

指定開始行到最后一行的效果如下:

sed和gawk編輯器怎么用

指定文本的效果如下:

sed和gawk編輯器怎么用

還可以通過文本的方式來指定范圍,效果如下:

sed和gawk編輯器怎么用

但該模式要慎用,因為對于 sed 編輯器來說,第一個文本的匹配是打開了行刪除功能,第二個文本的匹配則是關閉了行刪除功能。所以如果一直沒有匹配到第二個文本,就會因為無法關閉行刪除功能而導致將后續的內容全部刪除,效果如下:

sed和gawk編輯器怎么用

又或者目標文件的數據存在重復,就會導致 sed 編輯器再次匹配到第一個文本而打開行刪除功能,效果如下:

sed和gawk編輯器怎么用

19.2.4 插入和附加文本

sed 編輯器的 i 命令 會在指定行之前增加一行新數據,a 命令 會在指定行之后增加一行新數據,效果如下:

sed和gawk編輯器怎么用

需要注意的是,插入和附加命令使用的是反斜線( \ ) ,而替換命令使用的是正斜線( / )。

如果要同時插入或追加多行文本,需要在使用多行模式時,在每行文本的末尾添加 反斜線( \ ) ,效果如下:

sed和gawk編輯器怎么用

19.2.5 修改行

sed 編輯器的 c 命令 會修改指定行的所有數據內容,效果如下:

sed和gawk編輯器怎么用

需要注意的是,修改命令使用的也是反斜線( \ ) 。

19.2.6 轉換命令

sed 編輯器的 y 命令 可以處理單個字符,格式是 sed [address]y/inchars/outchars/ ,該命令會將 inchars 中的每個字符與 outchars 中的每個字符進行一一對應后分別替換,效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,轉換命令默認就是全局效果 ,并不像替換命令一樣需要使用 g 選項來打開全局替換效果。不過遺憾的是,轉換命令的轉換效果是否全局,是不可選的,缺省就是全局,也只能是全局轉換。

需要注意的是,inchars 和 outchars 的長度必須相同,否則會報錯,效果如下:

sed和gawk編輯器怎么用

19.2.7 回顧打印

除了替換命令中的 p 選項 可以用于打印被替換的行,還有以下三個命令可以打印數據流的信息:

  1. p 命令 用于打印文本行

  2.  = 命令 用于打印行號

  3.  l 命令 用于列出行,是小寫的 L

19.2.7.1 打印行

p 命令 可以打印指定的行內容,但建議和 sed -n 命令結合使用,效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,第一次使用 p 命令時,由于 sed 編輯器默認的輸出效果,首先輸出了完整的流數據,才輸出了 p 命令匹配的行內容。第二次結合 sed -n 命令屏蔽了默認輸出后,就可以只看到 p 命令的輸出結果了。

p 命令也支持行尋址,效果如下:

sed和gawk編輯器怎么用

19.2.7.2 打印行號

sed 編輯器默認會為目標文本的每一行添加編號,使用 = 命令 可以將這個編號輸出,效果如下:

sed和gawk編輯器怎么用

19.2.7.3 列出行

l 命令 的作用是打印出數據流中原本不可打印的 ASCII 字符,效果如下:

sed和gawk編輯器怎么用

19.2.8 使用 sed 處理文件

19.2.8.1 寫入文件

w 命令 可以將目標文件的指定行寫入到指定文件,效果如下:

sed和gawk編輯器怎么用

19.2.8.2 從文件讀取數據

r 命令 允許將指定文件的內容插入到目標文件的指定位置,效果如下:

sed和gawk編輯器怎么用

感謝各位的閱讀!關于“sed和gawk編輯器怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sed
AI

抚远县| 冷水江市| 榆林市| 康马县| 镇巴县| 纳雍县| 永川市| 三明市| 江华| 全州县| 木兰县| 双鸭山市| 兴宁市| 和静县| 汪清县| 盘锦市| 弋阳县| 乐都县| 博湖县| 剑河县| 柏乡县| 伊吾县| 贵州省| 长垣县| 嵊州市| 潜山县| 社会| 墨竹工卡县| 扎赉特旗| 长海县| 香格里拉县| 韶关市| 交口县| 巴青县| 徐水县| 兴安县| 镇沅| 洛宁县| 岑巩县| 于田县| 榆社县|