Linux文本處理工具sed

sed工作模式.jpg

sed工作原理:sed從文件中讀取出來一行,并不會直接進行編輯處理而是會放在自己的模式空間內進行處理,處理的結果將會送到標準輸出,默認情況下sed可以對每行文本進行處理,也可以讓sed處理符合條件的行,我們可以利用正則表達式做文本過濾,模式空間有兩種輸出結果,一種是可以匹配到的,會根據編輯要求進行處理,例如刪除,過濾字符串。另外一種則是匹配失敗的,會直接進行標準輸出。


sed常用選項:

            -n:不輸出模式空間中的內容至屏幕;不會把模式空間內的信息輸出出來。

            -e:多點編輯;可以同時編輯多個匹配條件 

            -f:/PATH/SED_SCRIPT_FILE 每行一個編輯命令;讀取文件內的篩選條件

            -R:支持使用擴展表達式;使用苦戰表達式

            -i: 直接編輯源文件;操作比較危險,會直接更改原文件。

地址定界:

(1)空地址:對全文進行處理;

(2)單地址:

  #:指定行;

                 [root@nzg7 ~]# sed -n '2p' /etc/passwd

                  /pattern/;被此模式匹配到的每一行;

                 [root@nzg7 ~]# sed -n '/^root/p' /etc/passwd

(3)地址范圍:

 #,#:

                 [root@nzg7 ~]# sed -n '1,2p' /etc/passwd

 #,+#:向后+#行

                [root@nzg7 ~]# sed -n '1,+2p' /etc/passwd

 #,/pat1/:

                [root@nzg7 ~]# sed -n '1,/^nologin/p' /etc/passwd

 /pat1/,/pat2/

               [root@nzg7 ~]# sed -n '/^root/,/^nologin/p' /etc/passwd

 (4)步進:~

         1~2:所有奇數行

               [root@nzg7 nzg]# sed -n '1~2p' f1

         2~2:所有偶數行

               [root@nzg7 nzg]# sed -n '2~2p' f1

編輯命令:

    d:刪除;

         [root@nzg7 nzg]# sed  '2~2d' f1     刪除偶數行

    p: 顯示模式空間中的內容;

          [root@nzg7 nzg]# sed -n '2~2p' f1     顯示匹配結果

           a \text:在行后面追加文本"text",支持使用\n實現多行追加;

          [root@nzg7 nzg]# sed  '100a \luyubo' f1
          [root@nzg7 nzg]# sed  '100a \luyubo\nnaozhongge' f1

   i \text;在行前面插入文本"text",支持使用\n實現多行插入;   加.可以實現備份

          [root@nzg7 nzg]# sed  '100i \luyubo' f1
          [root@nzg7 nzg]# sed  '100i \luyubo\nnaozhongge' f1

    c \text:把匹配等到的行替換為此處指定的文本“text”;

          [root@nzg7 nzg]# sed  '100c \luyubo' f1
          [root@nzg7 nzg]# sed  '100c \luyubo\nnaozhongge' f1

    W /PTAH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;

          [root@nzg7 nzg]# sed -n '/^[^#]/w /home/nzgqq' /etc/fstab

            r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行后面;

         [root@nzg7 nzg]# sed -n '/^[^#]/r /home/nzgqq' /etc/fstab

            = 為模式匹配到的行打印行號;

         [root@nzg7 nzg]# sed '/^[^#]/=' /etc/fstab

!條件取反;

 地址定界!編輯命令;

        [root@nzg7 nzg]# sed -n '/^[^#]/!p' /etc/fstab

           s///:查找替換,其分隔符可自行指定,常用的有s@@@,s###等

  例如:刪除/etc/grub2.conf文件中所有以空白開頭的行行首的 空白字符 

        [root@nzg7 nzg]# sed -n 's@^[[:space:]]\+@@p' /etc/grub2.cfg

          替換標記:

        g:全局替換;

        [root@nzg7 nzg]# sed -n 's@[[:digit:]]@q@pg' f1

         w:/PATH/TO/SOMEFILE; 將替換成功的結果保存至指定文件中;

         p:顯示替換成功的行;

        [root@nzg7 nzg]# sed -n 's@[[:digit:]]@q@pgw /home/f22' f1

         高級編輯命令:

         h:把模式空間中的內容覆蓋至保持空間中;

         H:把模式空間中的內容追加至保持空間中;

         g:把保持空間中的內容覆蓋至模式空間中;

         G:把保持空間中的內容追加至模式空間中;

         x:把模式空間中的內容與保持空間中的內容互換;

         n: 覆蓋讀取匹配到的行的下一行至模式空間中;

         N:追加讀取匹配到的行的下一行至模式空間中;

         d:刪除模式空間中的行;

         D:刪除多行模式空間中的所有行;

         高級編輯命令示例:

         sed -n 'n;p' FILE           顯示偶數

         sed '1!G;h;$!d' FILE       倒序顯示

         sed '$!N;$!D' FILE          顯示最后兩行

         sed '$!d' FILE              顯示最后1行

         sed 'G' FILE                每行后面插入空格

         sed 'g' FILE                全部替換空格

         sed '/^$/d;G' FILE          每行后面插入空格

         sed 'n;d' FILE              顯示奇數

         sed -n '1!G;h;$p' FILE      倒序顯示

練習題案例:

1.刪除/etc/grub2.conf文件中所有以空白開頭的行行首的 空白字符 

[root@nzg7 nzg]# sed 's@^[[:space:]]\+@@p' /etc/grub2.cfg

2.刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符

[root@nzg7 nzg]# sed 's@^#[[:space:]]\+@@p' /etc/fstab

3.在/root/install.log每一行行首增加#號 

[root@nzg7 ~]# sed 's@^@#@' install.log

4.、在/etc/fstab文件中不以#開頭的行的行首增加#號 

[root@nzg7 ~]# sed -r 's@.*@#&@' install.log
[root@nzg7 ~]# sed 's@^@#@' install.log

5.處理/etc/fstab路徑,使用sed命令取出其目錄名和基名 

[root@nzg7 ~]# echo "/etc/fstab" | sed -r 's@^(/.*/)([^/]+/?)@\1@'
[root@nzg7 ~]# echo "/etc/fstab" | sed -r 's@^(/.*/)([^/]+/?)@\2@'

6.利用sed 取出ifconfig命令中本機的IPv4地址 

[root@nzg7 ~]# ifconfig | sed -n  '/\<inet\>/p' | sed -r 's@inet (([0-9]+\.){3}[0-9]+).*@\1@'
[root@nzg7 ~]# ifconfig | sed -n  '/\<inet\>/p' |sed -r 's@inet @@'| sed -r 's@netmask.*@@'

7.統計centos安裝光盤中Package目錄下的所有rpm文件的 以.分隔倒數第二個字段的重復次數

[root@localhost Packages]# ll *.rpm |sed -r 's@.*\.([^.]+)\.rpm$@\1@' |sort |uniq -c

原創文章,作者:鬧鐘哥,如若轉載,請注明出處:http://www.www58058.com/32459

(0)
鬧鐘哥鬧鐘哥
上一篇 2016-08-10 10:15
下一篇 2016-08-10 10:15

相關推薦

  • vim 作業

    4、如何設置tab縮進為4個字符?  vi/vim中,可以通過在~/.vimrc中添加set ts=4 執行source ~/.vimrc 重讀配置文件 5、復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log; 拓展模式下: &…

    學員作品 2016-08-15
  • 文本處理工具sed及文本編輯器vim課程作業

    文本處理工具sed課程作業     1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符         sed -n 's@^[[:space:]]\+@@p' /etc/grub2.cfg &…

    學員作品 2016-08-10
  • 91-ansible

    一. Ansible      Configuration、Command and Control

    2016-11-18
  • 2015 | 月入過萬,再不看你就會后悔

    新的一年,又是一個輪回的開始,又有很多學員加入了我們的征途!我們本著武俠精神,傳經授道,助你仗劍走天涯。為了讓新的學員更加有信心我們特此列一些學員反饋的就業情況,傳播正能量,我們承諾以下情況絕對真實,可找學員核實。 學員高薪就業 以上只是小部分學員,還有非常多的學員在淘寶、大眾點評、騰訊、攜程、新浪、九城、百度、搜狐、華泰證券、民生銀行、360、樂視網等等5…

    2015-03-09
  • 【驚爆】馬哥linux2016最新全套課程(內部泄密版)

    你知道么,馬哥linux2016最新全套課程(內部泄密版)被曝光了,小編剛剛得到消息,然后就給大家分享出來了,大家快來點評下,話說2016版課程如何?且聽小編慢慢為你道來 全新內容,全新陣容,引入ELK和Docker內容,更加貼合生產環境應用,全新的Centos7搭載完善的實戰實驗室,強大的不像實力派,特別需要說明的一點:0首付0利率,機會不容錯過?。?! 高…

    學員作品 2015-10-21
  • 鳥哥馬哥齊相聚,linux界最強音

    臺灣著名Linux網站——“鳥哥的Linux私房菜”的站長蔡德明,2015年3月28日受邀到51CTO進行交流,51cto學院還特此邀請大陸linux權威專家馬哥參與了本次活動,在輕松愉快的氛圍下,馬哥和鳥哥以及其他專家人員對于“容器虛擬化下運維調度層的設計”,“Linux在云計算的應用”,“可視化集成運維平臺最佳實踐”等三個議題展開思想的碰撞。本次馬哥和鳥…

    2015-03-30
欧美性久久久久