Linux之sed的使用

sed的工作原理

        sed是一種流編輯器以行為單位來處理文本的一款功能十分強大的編輯器,一次只處理一行內容,當處理文本是,將要處理的行放置在模式空間里(緩沖區),接下來sed命令處理模式空間里的內容,處理完成后,把模式空間里處理后的內容送至屏幕打印輸出,接下來處理下一行,依次循環,知道文件尾部,默認sed是不編輯源文件的,僅對模式空間中的處理做處理,除非使用了-i選項來編輯源文件。

sed的用途

         主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等。

 

語法格式:

         sed [OPTION]… {script-only-if-no-other-script} [input-file]..

選項

        -n:不輸出模式空間內容的自動打印,靜默模式

         -e:多點編輯也可以使用腳本 script –e  script

         -f/path/to/scriptfile,從指定文件中讀取編輯腳本

         -r:支持使用擴展正則表達式

         -i:編輯源文件

 

地址定界:

1、  不給地址:對全文進行處理

2、  單地址

#:指定的行,數字表示,如果想顯示到屏幕上使用-n

sed  ‘1p’   /etc/fstab

1.jpg

/pattern/:被此處模式所能匹配到的每一行

sed ‘/^UUID/p’  /etc/fstab

 2.jpg

3、  地址范圍

#,#1,3表示的是文本的第一行到第三行

sed ‘1,3p’ /etc/fstab

 3.jpg

#,+#1,+3從第一行往后面的3行進行處理

sed ‘1,+3/^UUID/p’   /etc/fstab

 4.jpg

/pat1/,/pat2/:第一次被pattern匹配的行開始至第一次被pattern2匹配的行的結束,這中間的所有行

sed  ‘/^root/,/^p/p’  /etc/fstab

 5.jpg

#,/pat1/1,/pat1/第一行開始到被pattern1匹配的行的結束這中間的所有行

sed  ‘1,/^mail/p’  /etc/fstab

 6.jpg

         4、~步進

         1~2:基數行,文件的1,3,5,7……

           2~2:偶數行,文件的2,4,6,8

         7.jpg

        8.jpg

編輯命令        

         d:刪除模式空間匹配的行

         sed  ‘1d’  /etc/fstab

        9.jpg

         p:顯示模式空間中的內容,前面已經舉例這里就不在重復

        

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

         sed  ‘1,3a \this is mine’  /etc/fstab

         10.jpg

         i  \text :在航前插入文本;支持使用\n實現多行插入

         sed  ‘2i \hello world’   /etc/fstab

         11.jpg

         c  \text :替換行為單行或多行文本,將當前的行的內容替換你輸入的內容

         sed ‘/^root/c \rooter’  /etc/passwd

        12.jpg

         w  /path/to/somefile:保存被模式空間匹配的行至指定文件

         sed ‘/root/w  /tmp/root.txt’  /etc/passwd

        13.jpg

         r  /path/to/somefile:讀取指定文件的文本至模式空間中匹配到行后

         sed  ‘2r  /etc/issue’  /etc/fstab

        14.jpg

         =:為模式空間中的行打印行號

         !:模式空間中匹配行取反處理

        16.jpg

         s///:查找替換,支持使用其他分隔符,@@@,###,當遇到/時可以使用這兩種符號,避免轉意

         sed  ‘s/oot/OOT/’  /etc/passwd

         sed  ‘s@/@#/’    /etc/fstab

        17.jpg

    18.jpg

         替換標記

         g:行內全局替換,一行中如果匹配到多個內容,所以匹配到的內容都會進行替換

   sed 's/oot/OOT/g'  /etc/passwd

         p:顯示替換成功的行

   sed 's/oot/OOT/p' /etc/passwd

         w /path/to/somefile:將替換成功的行保存至文件中

   sed 's/ot/OOT/w /tmp/root.txt'  /etc/passwd

sed高級編輯命令:

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

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

         g:從保持空間取出數據覆蓋至模式空間

         G:從保持空間取出數據追加至模式空間

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

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

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

         d:刪除模式空間中的行

         D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed

1.jpg

 

 

練習

   

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

 sed 's/^[[:space:]]//' /etc/grub2.cfg

20.jpg

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

sed -r  's/^#[[:space:]]\+//'  /etc/fstab

21.jpg


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

sed 's/^/#&/g'  /root/install.log

22.jpg


/etc/fstab文件中不以#開頭的行的行首增加#

sed 's/[^#]/#&/g'  /etc/fstab

23.jpg



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

24.jpg


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

ifconfig  |sed -n '2p'|sed 's/Bcast.*$//'|sed 's@.*:@@'

19.jpg


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

 ls  /media/Packages/* .rpm |sed   's/.rpm$//g'|sed 's/.*\.//'|sort  -n  |uniq -c

26.jpg

 

原創文章,作者:fszxxxks,如若轉載,請注明出處:http://www.www58058.com/31930

(0)
fszxxxksfszxxxks
上一篇 2016-08-09
下一篇 2016-08-10

相關推薦

  • Linux高級文件系統管理之磁盤配額、軟RAID及LVM

    高級文件系統管理之磁盤配額、軟RAID及LVM   本章內容: 設定文件系統配額 設定和管理軟RAID設備 配置邏輯卷   一、文件系統配額:     執行軟限制(soft limit) 硬限制(hard limit)     注:磁盤配額只能針對分區控制有效,不能對整個磁盤控制…

    Linux干貨 2016-09-01
  • N25-第六周作業

    第六周 請詳細總結vim編輯器的使用并完成以下練習題 文本編輯器: vim:     模式化的編輯器         基本模式:          &…

    Linux干貨 2016-12-28
  • 交換分區管理

    創建交換分區 linux上的交換分區必須使用獨立的文件系統且文件系統的systemid必須為82mkswap [options] device [size] 創建交換分區文件系統 掛載交換分區     swapon 設備名稱 處理交換文件和分區     交換分區是系統RAM的補充  &nb…

    Linux干貨 2016-09-02
  • 【Linux基礎】計算機及操作系統基礎

    【Linux基礎】計算機及操作系統基礎 計算機的組成及其功能 計算機的組成 簡單來說,計算機應由兩部分組成:第一部分:硬件 馮諾依曼結構體系 當前計算機主要是基于馮諾依曼體系結構設計的,在該體系中,計算機硬件由5個部件組成。分別是:運算器、控制器、存儲器、輸入設備和輸出設備。而現今運算器和控制器一般集成在一起,叫中央處理器(Central Processin…

    Linux干貨 2018-03-04
  • bash特性、bash編程

    bash基礎特性: 命令行展開:~,{} 命令別名:alias,unalias 命令歷史:history 命令和路徑補全:$PATH glob通配符:*,?,[],[^], 快捷鍵:Ctrl+{a,e,l,c,u,k} 命令hash:   bash通配符及特殊符號: 通配符: ?:任意一個字符; *:匹配任意個任意字符; []:匹配括號內的任意一個…

    Linux干貨 2018-03-21
  • 馬哥教育網絡班21期-第一周課程練習

    第一周課程練習 1、描述計算機的組成及其功能?         1.1 現代主流的計算機(馮·諾依曼體系)主要由五部分組成,分別是控制器、運算器、存儲器、輸入和輸出設備。控制器和運算器對應我們現實計算機看到的CPU,存儲器對應內存和硬盤等存儲設備,輸入設備對應鼠標鍵盤等其它外設,輸出設備對應顯示器、音響、打印機等其它外…

    Linux干貨 2016-06-26

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-10 15:32

    文章整體結構清晰,有理論有時間,圖文并貌,特殊用法h跟H方向錯了哦。

欧美性久久久久