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指令集有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
删除操作d
/regular/,/regular/command
插入操作i,追加操作a(不可處理一個範圍)
/regular/command\
内容
插入與追加操作不影響模式空間,即模式空間的行計數不變.
修改操作c(可處理一個範圍)
/regular/,/regular/command\
當修改操作作用于一封閉大括号并作用于一個範圍時,将産生相同于範圍行數的輸出.
清單(l)
用于顯示模式空間的内容,包括不可見字元
轉換(y)
[address]y/abc/xyz/
列印(p)
列印指令不同于替換指令中的p,後者是以成功替換為條件的.
下一步(next):n
較難了解,待深入學習
在執行next後,控制将被傳遞給後序指令.
讀寫檔案
[line-address]r file
[address]w file
[line-address]是要操作的檔案行号,将file的内容追加到指定行号之後.
sed的進階指令:
多行模式空間 PDN