sed:流編輯器:
正則表達式
sed是一種在線編輯器,他一次只能處理一行內容,在處理文件時,把當前處理的行存儲到臨時緩衝區,咱們稱爲 模式空間 ,接着sed會處理模式空間中的文本,而後發送到標準輸出,若是匹配不成功,則默認發送到標準輸出,而後處理下一行,直到文件末尾。
express
sed格式:bash
sed [OPTION]... 'script' [input-file]...編輯器
option:ide
-n, --quiet, --silent:對於不能被PATTERN匹配的行,不發往標準輸出;ui
[root@localhost ~]# sed 'p' b.txt #'p' 用來標準輸出 aaaa aaaa bbbb bbbb aaaa aaaa cccc cccc dddd dddd [root@localhost ~]# sed -n 'p' b.txt aaaa bbbb aaaa cccc dddd
-e script, --expression=script:多條件編輯;spa
-f script-file, --file=script-file:從指定的script-file中讀取腳本內容再編輯;regexp
咱們編輯a.txt的內容爲 n [root@localhost ~]# sed --file=a.txt b.txt aaaa bbbb aaaa cccc dddd
注意:script-file最好使用絕對路徑來指定;ip
-i[SUFFIX], --in-place[=SUFFIX]:直接編輯源文件;字符串
r, --regexp-extended:能夠使sed支持擴展正則表達式;
script:AddressesCommand
Addresses:地址定界
1.空地址:表示對指定文件的全部行進行編輯處理;
2.單地址:sed對於可以匹配該地址的惟一一行進行處理;
#:表示指定行號的那行;
[root@localhost ~]# sed -n '2p' b.txt bbbb
/PATTERN/:可以被PATTERN匹配的全部行 ;
[root@localhost ~]# sed -n '/aaaa/p' b.txt aaaa aaaa
$:表示指定文件的最後一行;sed不支持$-1;
[root@localhost ~]# sed -n '$p' b.txt dddd
3.地址範圍:
addr1,addr2:addr1和addr2都表示行號,從addr1行開始到addr2行結束的中繼的全部行,包括addr1和addr2;
[root@localhost ~]# sed -n '1,2p' b.txt aaaa bbbb
first~step:first和step都數字,從first行開始,以step爲步長,所通過的全部行;例如:1~2或2~2
[root@localhost ~]# sed -n '1~2p' b.txt aaaa aaaa dddd
addr1,+N:從addr1行開始,向後查找N行,包括addr1行;
[root@localhost ~]# sed -n '1,+2p' b.txt aaaa bbbb aaaa
addr1,~N:從addr1行開始,向後查找addr1*N行,包括addr1行;
[root@localhost ~]# sed -n '1,~4p' b.txt aaaa bbbb aaaa cccc
/PATTERN1/,/PATTERN2/:
從被PATTERN1第一次匹配的行開始,到被PATTERN2第一次匹配的行結束;繼續向後找第二次匹配的行,第三次匹配的行,...
[root@localhost ~]# sed -n '/^aa/,/^bb/p' b.txt aaaa bbbb aaaa cccc bbbbb
Command:
=:顯示被PATTERN匹配的行的行號;
a \text:在被模式匹配的行以後追加text的內容;支持使用"\n"換行,從而實現追加多行信息;
[root@localhost ~]# sed '1a \shanchu' b.txt aaaa shanchu bbbb aaaa cccc dddd aaaa cccc bbbbb
在第一行後面一行添加shanchu語句
i \text:在被模式匹配的行以前插入text的內容;支持使用"\n"換行,從而實現插入多行信息;
c \text:將被模式匹配的行直接修改成text的內容;支持使用"\n"換行,從而實現修改原內容爲多行信息;
[root@localhost ~]# sed '1c \shanchu' b.txt shanchu bbbb aaaa cccc dddd aaaa cccc bbbbb 將第一行修改成shanchu
d:在模式空間中刪除被模式匹配的行;
注意:通常在使用d命令時,不建議使用-n選項;
將第一行刪除 [root@localhost ~]# sed '1d' b.txt bbbb aaaa cccc dddd aaaa cccc bbbbb 若添加-n選項則沒法看到輸出結果 [root@localhost ~]# sed -n '1d' b.txt [root@localhost ~]#
p:將模式空間中被模式匹配的行發送到標準輸出;
注意:通常在使用p命令時,建議使用-n選項;
w filename:filename能夠是一個相對路徑,也能夠是一個絕對路徑;w命令將模式空間中被PATTERN匹配的行,存儲到指定的文件中;
注意:通常在使用w命令時,建議使用-n選項;
r filename:filename能夠是一個相對路徑,也能夠是一個絕對路徑;r命令將指定的文件內容添加至被PATTERN匹配的行的後面;
!Command:在模式空間中被PATTERN匹配的行,不執行Command;相反,沒有被PATTERN匹配的行,會執行Command;
s///:查找並替換,分隔符能夠隨意更換,但必須保持一致;s@@@, s###, s''', ...
s/regexp/replacement/[control]
regexp:正則表達式,也就是PATTERN,計劃查找並替換的內容就是可以被regexp匹配的內容;
replacement:要替換的結果,純字符串;
支持後向引用:
s/\(string\)/&/
s/\(string\)/\1/
替換:: [root@localhost ~]# sed '1s/^aa/ww/' b.txt wwaa bbbb aaaa cccc dddd aaaa cccc bbbbb 將第一行行首的aa修改成ww
高級編輯命令:
h:將模式空間中的內容存儲到保持空間中,並覆蓋保持空間中原有內容;
H:將模式空間中的內容存儲到保持空間中,並追加至原有內容以後;
g:從保持空間取出數據存儲到模式空間中,並覆蓋模式空間的原有內容;
G:從保持空間取出數據存儲到模式空間中,並追加至原有內容以後;
x:將模式空間中的內容與保持空間中的內容交換;
n:讀取被PATTERN匹配到的行的下一行,覆蓋到模式空間;
N:讀取被PATTERN匹配到的行的下一行,追加到模式空間;
D:刪除模式空間中的全部行;