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 21:20
下一篇 2016-08-10 10:15

相關推薦

  • https實現

    實現https 搭建CA 頒發證書

    2018-01-29
  • Linux 文件系統權限

    一、簡述權限  文件系統的權限管理機制的建立,約束了用戶對數據的操作。 1、對系統安全而言  管理員的操作權限非常大,足以破壞系統,權限機制將管理員與普通用戶之間區分開,防止系統被隨意破壞。 2、對用戶而言  Linux是一個多用戶的操作系統,不同用戶間為了防止其他人破壞數據或訪問數據,文件系統的權限管理是非常必要的。 二、文件…

    Linux干貨 2016-08-04
  • 用戶和組相關的配置文件總結

    包括:/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow,/etc/login.defs,/etc/dufaults/useradd,/etc/skel/.*,/etc/gdm/custom.conf,   /etc/passwd 用戶信息庫文件;用于保存用戶賬號信息; 各字段含義依次為: 用戶名:用戶密…

    Linux干貨 2016-10-25
  • IO重定向和管理及管道

    IO重定向   通常對程序來講,輸入輸出數據可以是鍵盤、鼠標、顯示器等;IO重定向就是將原來系統命令的默認執行方式進行改變,比如說簡單的我不想看到在顯示器輸出而是希望輸入到某以文件中的可以通過Linux重定向進行這項工作。  IO重定向和FD(File Descriptor)有關。      標準輸入(std…

    Linux干貨 2016-08-05
  • Linux簡單命令

    cal 日歷 bc? 計算器 ? ? obase=2 輸出為二進制?????? ibase=2輸入為二進制????? \onnn八進制????? \xHH十六進制 $()識別命令和變量,同反向單引號 , 可在命令調用另一個命令的執行結果時用 字體顏色:紅色-打包文件(壓縮包),綠色-可執行,淺藍-軟連接,藍色-目錄 echo $SHELL查看當前shell …

    Linux干貨 2018-03-18
  • 進程和優先級

    ???? 什么是進程?我們先來了解一下進程的概念:我們知道操作系統最核心的概念就是進程。進程簡單來說就是在操作系統中運行的程序,它是操作系統資源管理的最小單位。但是進程是一個動態的實體,它是程序的一次執行過程。進程和程序的區別在于:進程是動態的,程序是靜態的,進程是運行中的程序,而程序是一些保存在硬盤上的可執行代碼。 ?? 當多個任務要執行時怎么辦呢?先執行…

    2017-09-09

評論列表(1條)

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

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

欧美性久久久久