溫馨提示×

溫馨提示×

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

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

sed和gawk編輯器怎么用

發(fā)布時間:2021-12-16 17:02:06 來源:億速云 閱讀:201 作者:小新 欄目:大數(shù)據(jù)

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

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

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

19.1 文本處理

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

19.1.1 sed 編輯器

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

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

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

sed和gawk編輯器怎么用

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

默認(rèn)情況下,sed 編輯器會將指定的命令應(yīng)用到 STDIN 上,這樣就可以直接將數(shù)據(jù)通過管道輸入到 sed 編輯器中進(jìn)行處理,效果如下:

sed和gawk編輯器怎么用

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

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

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

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

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

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

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

sed和gawk編輯器怎么用

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

19.1.2 gawk 編輯器

gawk 編輯器可以提供一個類編程環(huán)境,讓修改和重新組織文件中的數(shù)據(jù)變的更得心應(yīng)手。
Linux 中默認(rèn)沒有安裝 gawk 編輯器,如果當(dāng)前 Linux 中不存在該編輯器,需要使用 yum install gawk 命令進(jìn)行安裝。

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

sed和gawk編輯器怎么用

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

sed和gawk編輯器怎么用

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

19.1.2.1 gawk 命令格式

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

sed和gawk編輯器怎么用

19.1.2.2 從命令行讀取腳本

默認(rèn)情況下,gawk 編輯器從 STDIN 中接收數(shù)據(jù),效果如下:

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

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

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

19.1.2.3 使用數(shù)據(jù)字段變量

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

  •  $0 表示整個文本行

  • $1 表示第一個數(shù)據(jù)字段

  • $2 表示第二個數(shù)據(jù)字段

  •  以此類推

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

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

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

19.1.2.4 在腳本中使用多個命令

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

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

19.1.2.5 從文件中讀取腳本

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

sed和gawk編輯器怎么用

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

19.1.2.6 在處理數(shù)據(jù)之前運行腳本

gawk 編輯器可以控制腳本命令的運行時機(jī)。默認(rèn)情況下,腳本命令會在讀取一行文本后就自動執(zhí)行一次。但可以通過 BEGIN 關(guān)鍵字 強(qiáng)制 gawk 在讀取數(shù)據(jù)之前執(zhí)行指定腳本。 ,效果如下:

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

19.1.2.7 在處理數(shù)據(jù)后運行腳本

使用 END 關(guān)鍵字可以強(qiáng)制 gawk 在讀取數(shù)據(jù)結(jié)束之后執(zhí)行指定腳本,效果如下:

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

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

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

19.2 sed 編輯器基礎(chǔ)

介紹一些常用的 sed 命令。

19.2.1 更多的替換選項

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

19.2.1.1 替換標(biāo)記

默認(rèn)情況下,在執(zhí)行替換命令時,只會替換每行出現(xiàn)的第一個匹配項,如果每行有超過一個匹配項,那么后續(xù)的都會被忽略,效果如下:

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

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

sed和gawk編輯器怎么用

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

第一種方式是通過數(shù)字標(biāo)記,指定要替換的匹配項,效果如下:

sed和gawk編輯器怎么用

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

sed和gawk編輯器怎么用

在上圖中可以看到,使用 sed 命令后的替換目標(biāo)是 second 字段,該字段只有第二行數(shù)據(jù)存在一次匹配。當(dāng)?shù)谝淮问褂迷撁詈?,將所有被掃描的行都進(jìn)行輸出。當(dāng)?shù)诙卧谔鎿Q命令某位替換 p 標(biāo)記 后,在所有被掃描的行都輸出后,再次輸出了被替換內(nèi)容的第二行,這就是 p 標(biāo)記 的效果。

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

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

sed和gawk編輯器怎么用

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

19.2.1.2 替換字符

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

sed和gawk編輯器怎么用

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

sed和gawk編輯器怎么用

19.2.2 使用地址

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

19.2.2.1 數(shù)字形式的行尋址

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

第一種形式的效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,只有第二行數(shù)據(jù)發(fā)生了變化。

第二種形式的效果如下:

sed和gawk編輯器怎么用

在上圖中可以看到,第二行和第三行的數(shù)據(jù)都發(fā)生了變化。

第三種形式的效果如下:

sed和gawk編輯器怎么用

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

19.2.2.2 使用文本模式過濾器

sed 編輯器允許對存在指定文本的行進(jìn)行內(nèi)容替換,效果如下:

sed和gawk編輯器怎么用

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

該模式如果結(jié)合正則表達(dá)式,將會發(fā)揮更強(qiáng)大的威力。

19.2.2.3 命令組合

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

sed和gawk編輯器怎么用

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

19.2.3 刪除行

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

指定單行的效果如下:

sed和gawk編輯器怎么用

指定多行的效果如下:

sed和gawk編輯器怎么用

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

sed和gawk編輯器怎么用

指定文本的效果如下:

sed和gawk編輯器怎么用

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

sed和gawk編輯器怎么用

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

sed和gawk編輯器怎么用

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

sed和gawk編輯器怎么用

19.2.4 插入和附加文本

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

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

19.2.5 修改行

sed 編輯器的 c 命令 會修改指定行的所有數(shù)據(jù)內(nèi)容,效果如下:

sed和gawk編輯器怎么用

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

19.2.6 轉(zhuǎn)換命令

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

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

19.2.7 回顧打印

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

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

  2.  = 命令 用于打印行號

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

19.2.7.1 打印行

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

sed和gawk編輯器怎么用

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

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

sed和gawk編輯器怎么用

19.2.7.2 打印行號

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

sed和gawk編輯器怎么用

19.2.7.3 列出行

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

sed和gawk編輯器怎么用

19.2.8 使用 sed 處理文件

19.2.8.1 寫入文件

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

sed和gawk編輯器怎么用

19.2.8.2 從文件讀取數(shù)據(jù)

r 命令 允許將指定文件的內(nèi)容插入到目標(biāo)文件的指定位置,效果如下:

sed和gawk編輯器怎么用

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

sed
AI