sed基本用法詳解

一、sed介紹:

       sed是非交互式的編輯器,同時又是面向字符流的,一次處理一行文本。當前輸入的行被緩存至一個被稱為模式空間(pattern space)的內存空間中,與給定的模式進行比對,若不匹配,則將內容輸出至屏幕,之后讀取第二行;若匹配,則執行編輯命令,命令執行完成后,將模式空間中的內容輸出至屏幕(默認行為)。之后再去讀取第二行,再比對,再處理…一直重復到讀取全部的文件內容。

       sed同grep、awk一樣,匹配模式支持使用正則表達式。默認支持基本正則表達式,通過指定選項可支持擴展正則表達式。

       sed只有在使用特定選項的情況下才會對原文件做修改,當然,這個行為具有破壞性,應該慎用。sed的輸出也可以采用重定向的方式保存至文本中。

二、sed用法:

       sed  [option]…  'script'  inputfile…

                     script:地址定界編輯命令

              1、常用options:

                     -n :不輸出模式空間中的內容至屏幕。默認情況下,模式空間中的內容會被輸出至屏幕。

                     -e script: 實現多點編輯。

                            例:sed -e script1 -e script2  somefile

                     -r :支持擴展正則表達式。sed默認支持基本正則表達式。

                     -f /path/to/sed_script_file:從指定文件中讀取編輯腳本來處理文件。

                     -i :直接編輯原文件,危險操作,慎用。

例:將/etc/fstab拷貝至/tmp,命名為fs1。對比下-n參數的意義。(p命令為顯示模式空間匹配到的內容。)

沒加-n參數,因為默認情況下,模式空間中的內容會被輸出至屏幕。我們又通過p命令讓第三行輸出了一次,所以第三行被輸出了兩次。

blob.png

看下,加上-n的效果。

blob.png

              2、地址定界

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

                     (2)單地址:

                            #:指定行

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

                     (3)地址范圍:

                              m,n:從第m行到第n行

                                   3,9

                              m,+n:從第#行開始,往后+n行,包含第m行

                                   3,+8

                              m,/pattern/:從指定的第m行開始,到第一次被pattern匹配的行

                              /pattern1/,/pattern2/:從第一次被模式1匹配到的行開始,到第一次被模式2匹配到的行結束。

                  (4)步進:~

                             1~2:所有奇數行。

                             2~2:所有偶數行

  例2.1:顯示fs1文件的6到10行

blob.png

 例2.2:顯示以#開頭的行到以/dev開頭的行。

它是這樣顯示的:從第一次匹配到#開頭的行開始,到第一次匹配到以/dev開頭的行結束。后面雖然還有以/dev開頭的行,但是匹配也不會進行了。

blob.png

 例2.3:編輯num.txt文件,每行對應1-10中的一個數字,顯示其奇數行和偶數行

 blob.png           

                     3、編輯命令

                            d:刪除匹配到的行

                                   sed  '1,5d' /etc/fstab

                                   sed  '/^UUID/d'

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

                            a  \text:(append)在模式匹配到的行后面追加文本,支持使用\n實現多行追加

                            i  \text:(insert)在模式匹配到的行前面插入文本,支持使用\n實現多行插入

                                   sed '3a \new line\nanother new line'  /etc/fstab

                            c  \text:把匹配到的行替換為指定的文本

                            w  /path/to/somefile:保存模式匹配到的行至指定的文件中

                            r  /path/to/somefile : 讀取指定為念的內容至被模式匹配到的行處;用于實現文件合并。

                            = :為被模式匹配到的每一行加上行號,行號會被當作一個新行

                            ! :取反

                                          位于模式之后,命令之前。地址定界!編輯命令

例:sed  -n '/^#/!p'  /etc/fstab

例3.1:刪除所有以#開頭的行

blob.png

例3.2:在以/dev開頭的行后加上內容為“alpha”的行

blob.png

例3.3:在不以/dev開頭的行后面加上內容為“alpha”的行。和上一題對比下結果。

blob.png

例3.4:讀取/etc/issue的內容,并將其追加至以UUID開頭的行后

blob.png

例3.5:將以/dev開頭的行的內容替換為“this line has been replaced”

blob.png

                        4、查找替換

                            s///:查找替換,分隔符可自定義,如:s@@@ 或s###。

                                 替換標記:

                                     g:全局替換。s///g

                                     p:顯示替換成功的行

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

                                                

                            sed 's@root@&hello@'  /etc/passwd:在root單詞后加上hello

                            sed 's@root@hello&@' /etc/passwd:在root單詞前加上hello

                            sed –i.bak ‘s/dog/cat/g’ pets  :在對pets文件做修改之前,先做備份,本分文件以".bak"結尾

 

例4.1:在fs1文件中不是以#開頭的行的行首增加#號。

blob.png

例4.3:利用sed取出給定路徑的基名和目錄名

(1)取基名。需要使用正則表達式中的后向引用

blob.png

(2)取目錄名

blob.png


原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/32267

(0)
M20-1鐘明波M20-1鐘明波
上一篇 2016-08-10 10:15
下一篇 2016-08-10 10:22

相關推薦

  • Linux權限管理與grep命令應用(第四周)

    第四周作業 1.復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限 [root@localhost ~]# cp -r /etc/skel/ /home/tuser1 [root@localhost ~]# ch…

    Linux干貨 2016-09-15
  • N26-博客作業-week7

    1、創建一個10G分區,并格式為ext4文件系統;      (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;     ~]# fdisk /dev/sda Welcome to fdisk (util-li…

    Linux干貨 2017-03-19
  • 馬哥教育網絡班21期+第六周課程練習

    1、描述計算機的組成及其功能 答: (1)計算機組成: 輸入(鍵盤)、輸出(顯示器),存儲器(硬盤),運算器,控制器(CPU) (2)實現功能:    1)文件系統    2)內存管理    3)網絡功能    4)進程管理    5)驅動程序 2、按系列羅列…

    Linux干貨 2016-08-15
  • RPM包管理功能全解?!镜谌堋?

    CentOS系統上rpm命令管理程序包: 安裝、升級、卸載、查詢、校驗、數據庫維護 rpm命令:rpm [OPTIONS] [PACKAGE_FILE]     安裝:-i, –install     升級:-U, –update,&n…

    Linux干貨 2016-11-26
  • Linux磁盤管理進階

    Linux磁盤管理進階 dd命令 SWAP與移動介質 磁盤配額 RAID dd命令 dd – convert and copy a file Copy a file, converting and formatting according&…

    Linux干貨 2016-09-05
  • Xen虛擬化平臺安裝及實時遷移

    前言 Xen是英國劍橋大學計算機實驗室開發的一個虛擬化開源項目,Xen可以在一套物理硬件上安全的執行多個虛擬機,它和操作平臺結合的極為密切,占用的資源極少。以高性能、占用資源少著稱,贏得了IBM、AMD、HP、Redhat和Novell等眾多世界級軟硬件廠商的高度認可和大力支持,已被國內外眾多企事業用戶用來搭建高性能的虛擬化平臺。 Xen虛擬化類型 Xen對…

    Linux干貨 2015-07-19
欧美性久久久久