sed命令

sed:流編輯器:

    sed是一種在線編輯器,他一次只能處理一行內容,在處理文件時,把當前處理的行存儲到臨時緩衝區,我們稱爲 模式空間 ,接着sed會處理模式空間中的文本,然後發送到標準輸出,如果匹配不成功,則默認發送到標準輸出,然後處理下一行,直到文件末尾。


sed格式:

       sed [OPTION]... 'script' [input-file]...

option

                -n, --quiet, --silent:對於不能被PATTERN匹配的行,不發往標準輸出;

[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:多條件編輯;

                -f script-file, --file=script-file:從指定的script-file中讀取腳本內容再編輯;

我們編輯a.txt的內容爲 n
[root@localhost ~]# sed --file=a.txt b.txt
aaaa
bbbb
	aaaa
cccc
 dddd


                注意:script-file最好使用絕對路徑來指定;

                -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:刪除模式空間中的所有行;






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章