天天看點

sed

sed: 非互動,不可逆轉    應用每行,作用全局

vi   : 互動,直覺

sed指令行選項===========================

簡單指令:sed -e

腳本檔案:sed -f

阻止自動輸出,指令操作行執行列印指令p:sed -n

======================================

sed對操作的檔案的一行依次執行腳本中的指令,對一行執行所有指令後再對操作檔案的下一行操作。一個指令的結果會成為下一條指令的輸入。即sed總是在處理原始行的最新形式。

如下面的例子

[talenhao@BJB0300 tmp]$ touch 1.txt

[talenhao@BJB0300 tmp]$ echo a> 1.txt 

[talenhao@BJB0300 tmp]$ touch sed 

[talenhao@BJB0300 tmp]$ vim sed

[talenhao@BJB0300 tmp]$ sed -f sed 1.txt 

c

模式空間:sed操作緩沖區 前一個指令的處理結果會做為後一個指令的處理内容.

sed 預設是全局透視尋址.

sed
正則必須封閉在//中

$在正則中表示行尾,在sed中表示最後一行。/^$/正則中還是表示一行的結尾。

位址有兩人種:行位址與模式位址

位址也可以是兩個正則表示:/正則/,/正則/指令

sed

感歎号!加在位址後操作指令前用于反轉操作

/正則/,/正則/!指令

分組操作

位址與指令可以使用{}進行分組操作。

sed

sed指令集有25個指令,常用的編輯指令有4個(caid),d(删除),a(追加),i(插入),c(修改)。

位址指令

[address]command

[line-address]command

address{

  command

  [address]command

  ...

}

address{command; command;command;...

替換操作:s

    [address]s/pattren/replacement/flags

sed

删除操作d

/regular/,/regular/command

插入操作i,追加操作a(不可處理一個範圍)

/regular/command\

内容

       插入與追加操作不影響模式空間,即模式空間的行計數不變.

修改操作c(可處理一個範圍)

/regular/,/regular/command\

       當修改操作作用于一封閉大括号并作用于一個範圍時,将産生相同于範圍行數的輸出.

sed

清單(l)

        用于顯示模式空間的内容,包括不可見字元

轉換(y)

        [address]y/abc/xyz/

列印(p)

        列印指令不同于替換指令中的p,後者是以成功替換為條件的.

下一步(next):n

        較難了解,待深入學習

    在執行next後,控制将被傳遞給後序指令.

讀寫檔案

        [line-address]r file

        [address]w file

    [line-address]是要操作的檔案行号,将file的内容追加到指定行号之後.

sed的進階指令:

        多行模式空間 PDN