溫馨提示×

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

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

sed的工作原理及使用

發(fā)布時(shí)間:2020-07-23 07:35:15 來源:網(wǎng)絡(luò) 閱讀:2438 作者:mdd9502053669 欄目:編程語言

  1.sed的概念

      sed意為流編輯器(Stream Editor),在Shell腳本和Makefile中作為過濾器使用非常普遍,也就是把前一個(gè)程序的輸出引入sed的輸入,經(jīng)過一系列編輯命令轉(zhuǎn)換為另一種格式輸出。sed 是基于Basic模式的,sed和vi都源于早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相同的。

   2.sed的工作原理

     sed 是一種在線編輯器,它一次處理一行內(nèi)容。處理時(shí),把當(dāng)前處理的行存儲(chǔ)在臨時(shí)緩

沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理

完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件

內(nèi)容并沒有改變,除非你使用重定向存儲(chǔ)輸出。Sed主要用來自動(dòng)編輯一個(gè)或多個(gè)文件;簡(jiǎn)化

對(duì)文件的反復(fù)操作。

   sed的工作原理及使用

3.sed的命令行格式

       sed命令行的基本格式為:

           sed option 'script' file1 file2 ...

           sed option -f scriptfile file1 file2 ...

       sed處理的文件既可以由標(biāo)準(zhǔn)輸入重定向得到,也可以當(dāng)命令行參數(shù)傳入,命令行參數(shù)可

以一次傳入多個(gè)文件,sed會(huì)依次處理。sed的編輯命令可以直接當(dāng)命令行參數(shù)傳入,也可以寫

成一個(gè)腳本文件然后用-f參數(shù)指定,編輯命令的格式為/pattern/action


    其中pattern是正則表達(dá)式,action是編輯操作。sed程序一行一行讀出待處理文件,如果某

一行 與pattern匹配,則執(zhí)行相應(yīng)的action,如果一條命令沒有pattern而只有action,這個(gè)

action將作用于待處理文件的每一行。

4.sed命令和選項(xiàng)

命令

a\ : 在當(dāng)前行后添加一行或多行。多行時(shí)除最后一行外,每行末尾需用“\”續(xù)行

c\ : 用此符號(hào)后的新文本替換當(dāng)前行中的文本。多行時(shí)除最后一行外,每行尾需

    用”\"續(xù)行

i\ :在當(dāng)前行之前插入文本。多行時(shí)除最后一行外,每行末尾需用”\"續(xù)行d刪除     行

h : 把模式空間里的內(nèi)容復(fù)制到暫存緩沖區(qū)

H :把模式空間里的內(nèi)容追加到暫存緩沖區(qū)

g :把暫存緩沖區(qū)里的內(nèi)容復(fù)制到模式空間,覆蓋原有的內(nèi)容

G:把暫存緩沖區(qū)的內(nèi)容追加到模式空間里,追加在原有內(nèi)容的后面

l :列出非打印字符

p :打印行

n :讀入下一輸入行,并從下一條命令而不是第一條命令開始對(duì)其的處理

q :結(jié)束或退出sed

r :從文件中讀取輸入行

! :對(duì)所選行以外的所有行應(yīng)用命令

s :用一個(gè)字符串替換另一個(gè)

g :在行內(nèi)進(jìn)行全局替換

w :將所選的行寫入文件

x :交換暫存緩沖區(qū)與模式空間的內(nèi)容

y :將字符替換為另一字符(不能對(duì)正則表達(dá)式使用y命令)

 注:紅色字體標(biāo)注的是重點(diǎn)掌握的

選項(xiàng)

-e :進(jìn)行多項(xiàng)編輯,即對(duì)輸入行應(yīng)用多條sed命令時(shí)使用

-n :取消默認(rèn)的輸出

-f :指定sed腳本的文件名

5.sed的基本使用

  1>/pattern/p:打印匹配pattern的行

    使用p命令需要注意,sed是把待處理文件的內(nèi)容連同處理結(jié)果一起輸出到標(biāo)準(zhǔn)輸出的,

因此p命令表示除了把文件內(nèi)容打印出來之外還額外打印一遍匹配pattern的行。比如一個(gè)

文件file的內(nèi)容是

sed的工作原理及使用

滿足以1開頭的行并打?。?/span>

sed的工作原理及使用

要想只輸出處理結(jié)果,應(yīng)加上-n選項(xiàng),這種用法相當(dāng)于grep命令

sed的工作原理及使用


 2> /pattern/d :刪除匹配pattern的行

       刪除file中以6結(jié)尾的行

sed的工作原理及使用

  注意,sed命令不會(huì)修改原文件,刪除命令只表示某些行不打印輸出,而不是從原文件中刪去。

  3> /pattern/s/pattern1/pattern2/:查找符合pattern的行,如果不加g的話就

將該行第一個(gè)匹配pattern1的字符串替換為pattern2,如果加g的話就將該行所有pattern1替換為pattern2.

sed的工作原理及使用

sed的工作原理及使用

 4>在替換中&符號(hào)和\1 的使用

   &符號(hào)相當(dāng)于要替換的字符串本身,\1和&符合有相同的作用 sed的工作原理及使用

  5> sed -i : 做的操作會(huì)修改原文件

sed的工作原理及使用

 6>定址

  例如打印file里的1-2行內(nèi)容

sed的工作原理及使用

5.模式空間和保持空間

   sed在正常情況下,將處理的行讀入模式空間(pattern space),腳本中

的“sedcommand(sed命令)”就一條接著一條進(jìn)行處理,直到腳本執(zhí)行完畢。然后

該行被輸出,模式(pattern space)被清空;接著,在重復(fù)執(zhí)行剛才的動(dòng)作,文件

中的新的一行被讀入,直到文件處理完畢。

一般情況下,數(shù)據(jù)的處理只使用模式空間(pattern space),按照如上的邏輯即

可完成主要任務(wù)。但是某些時(shí)候,使用通過使用保持空間(hold space),還可以

帶來意想不到的效果。

  模式空間:可以想成工程里面的流水線,數(shù)據(jù)之間在它上面進(jìn)行處理。

  

  保持空間:可以想象成倉庫,我們?cè)谶M(jìn)行數(shù)據(jù)處理的時(shí)候,作為數(shù)據(jù)的暫存區(qū)域。

  正常情況下,如果不顯示使用某些高級(jí)命令,保持空間不會(huì)使用到!



sed命令:

+ g:[address[,address]]g 將hold space中的內(nèi)容拷貝到pattern space中,原來                                  pattern space里的內(nèi)容清除

+ G:[address[,address]]G 將hold space中的內(nèi)容追加到pattern space\n后


+ h:[address[,address]]h 將pattern space中的內(nèi)容拷貝到hold space中,原來                                   的hold space里的內(nèi)容被清除

+ H:[address[,address]]H 將pattern space中的內(nèi)容追加到hold space\n后


+ d:[address[,address]]d 刪除pattern中的所有行,并讀入下一行到pattern中


+ D:[address[,address]]D 刪除multiline pattern中的第一行,不讀入下一行


+ x:交換保持空間和模式空間的內(nèi)容

+N:表示讀取下一行追加到pattern中

+n:表示讀取下一行到pattern中

命令練習(xí):

 1>給test文件里的每一行后加一空行

 sed的工作原理及使用sed的工作原理及使用

 2>用sed模擬出tac的功能(倒序輸出)

 sed的工作原理及使用

  解析逆序的過程:

 sed的工作原理及使用

 如果是第一行的話,先讀取到pattern space,再將其拷貝到hold space,不是最

后一行的話,刪除pattern space 里的東西,在進(jìn)行下次讀取,然后將hold里的內(nèi)

容追加到pattern,在將pattern拷貝到hold,重復(fù)上述的過程,將將文件的內(nèi)容逆

序了。

  

 3>追加匹配行到文件結(jié)尾

sed的工作原理及使用

sed的工作原理及使用

 4>行列轉(zhuǎn)換

sed的工作原理及使用

sed的工作原理及使用

sed的工作原理及使用

5>求1~100的求和

sed的工作原理及使用

 6>打印奇偶行

sed的工作原理及使用

7>1-100再求和

sed的工作原理及使用

 :a表示標(biāo)簽a,ba表示跳轉(zhuǎn)到a標(biāo)簽,$表示最后一行,!表示不做后續(xù)操作,所

以,$!ba表示最后一行不用跳轉(zhuǎn)到a標(biāo)簽,結(jié)束此次操作。






 



  




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

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

AI