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
下一篇 2016-08-10

相關推薦

  • 筆記整理:權限管理1-基礎權限管理&默認權限

    權限管理: 權限的分配根據owner和group來進行分配的   對于文件,各個權限的意義: r:可以使用工具查看內容 w:往里寫 x:運行,提請內核發起一個進程 對于目錄,各個權限的意義: r:用ls 查看目錄列表   w:可以創建或刪除目錄中的文件   x:可以使用ls -l查看文件列表,也可cd進去   管理命令…

    Linux干貨 2016-08-05
  • 使用vim編輯器進行編程

    1.首先需要配置vim的語法風格,具體操作如下 # vim /etc/vimrc set nu 這是設置顯示行號** set showmode 設置在命令行界面最下面顯示當前模式等。 set ruler 在右下角顯示光標所在的行數等信息 set autoindent 設置每次單擊Enter鍵后,光標移動到下一行時與上一行的起始字符對齊 set ts=4 注:…

    2017-04-09
  • 群集簡介和LVS_nat模式配置

    群集簡介: 群集(或集群)和稱呼來自于英文單詞cluster,表示一群、一串的意思,用在服務器領域則表示大量服務器的集合體,以區分于單個服務器。 根據實際企業環境的不同,群集所提供的功能也各不相同,采用的技術細節也可能各有千秋,但無論哪種群集,都至少包括兩臺節點服務器。而對外表現為一個整體,只提供一個訪問入口(域名或IP地址),相當于一臺大型計算機。根據群集…

    Linux干貨 2017-02-13
  • Linux文本處理三劍客之一grep

            終于又到了一周一篇博客的日子 在這學習已經三周了,慢慢養成了寫博客的好習慣,也慢慢的懂得了怎么寫博客。這周給我印象最深刻的就是正則表達式,原本打算要寫前幾天所學的內容,但是昨天學到正則表達式讓我有點懵,所以我今天會用一天的時間去給大家詳細講解正則表達式,爭取讓那些和我一樣困解的人能夠豁然開朗,也正是因為…

    2017-07-29
  • 馬哥教育網絡21期+第十一周練習博客(下)

    馬哥教育網絡21期+第十一周練習博客(下) 3、描述DNS查詢過程以及DNS服務器類別。 DNS:Domain Name Service 通俗的稱為地址解析,使用TCP和UDP的53端口,是屬于應用層的協議; DNS查詢有2種方式:     遞歸查詢:至發送一次請求,就能找到最終的結果的查…

    Linux干貨 2016-09-26
欧美性久久久久