sed 流編輯器使用詳解

一、Stream EDitor, 行編輯器

  sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。 Sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等。

sed [option]… 'script' inputfile…

        ? 常用選項:

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

        (??梢耘浜蟨聯用,代表只顯示匹配到的內容)

        -f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本

        -e 'script' -e 'script' :指定多個編輯指令 ,多點編輯(類似上方-f , -e 為同時執行多個腳本)

            eg: sed –n –e ‘/^$/p’ –e ‘/^$/=’ file

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

        -i: 原處編輯 (直接修改原文件)

        建議使用-i.bak  ,表示修改前先自動生成備份文件,備份文件于原目錄下.bak

地址定界:

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

        (2) 單地址:

        #: 指定的行

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

            (模式需要用 / / 封裝起來)

    

        (3) 地址范圍:

            m,n          從m行—n行

            #,+N       從#行開始,加N行

            /pat1/,/pat2/     模式1–模式2之間的行

            #,/pat1/       從第#行開始—–到模式1匹配到的行

        (4) ~:步進

            1~2 奇數行

    sed 流編輯器使用詳解

             2~2 偶數行

     sed 流編輯器使用詳解

編輯命令:

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

               sed '1,3d' file  刪除1-3行   (地址定界)

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

                 sed -n '1,3p' file  1-3行   (地址定界)

                  只顯示1,3行內容

            a \text(append)在行后面追加文本;支持使用\n實現多行追加

                eg:  '2a\abcdedg'在第二行后追加abcdedg

                sed –n‘s/root/&superman/p’ /etc/passwd

                單詞后追加,&代表前面匹配的內容,類似分組

                    superman&則代表后root前面追加

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

            c \text:替換行為單行或多行文本

      sed 流編輯器使用詳解

            注意此示例: 第3、4行由于沒有填充內容,直接被刪除 

       sed 流編輯器使用詳解

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

            r /path/from/somefile:讀取指定文件的文本至模式空

                        間中匹配到的行后

               支持條件匹配 :  sed '/pattern/r file1'  file2

               eg:在第九行后面插入 sedtest 文件內容到 username中

    sed 流編輯器使用詳解sed 流編輯器使用詳解

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

                   eg: '2,10='  2-10行顯示行號

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

                eg: '2,10!p'    除了2-10行,其他都顯示//

查找替換:

            s///:查找替換,支持使用其它分隔符, s@@@, s###

           

            替換標記:

              g: 行內全局替換

                  不加的話,只替代第一個匹配到的

              p: 顯示替換成功的行

                常搭配 -n  聯用

               w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

高級編輯命令:

                 保持空間:臨時存放已經處理過的數據的空間

                模式空間:當前處理的行存儲在臨時緩沖區

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

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

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

                G:從保持空間取出內容追加至模式空間

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

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

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

                d: 刪除模式空間中的行

                D:刪除當前模式空間開端至\n的內容(不在傳至標準輸

                出),放棄之后的命令,但是對剩余模式空間重新執行sed

                 sed -n 'n;p' FILE

            輸出偶數行(奇數行進入模式空間后被下一行覆蓋)

            

            ? sed '1!G;h;$!d' FILE

                第一行則執行h,非第一行執行G ,非最后一行則d刪除

                效果: 倒置保存在保持空間中

             

            sed '$!N;$!D' FILE

                非尾行則追加后面一行在模式空間,不是最后一行則刪除

                效果: 模式空間中保存有最后兩行

            

            ? sed '$!d' FILE

                不是最后一行則刪除

                效果: 顯示最后一行

            

            ? sed ‘G’ FILE

                保持空間中,默認是空

                效果: 隔行輸出

            ? sed ‘g’ FILE

                效果: 顯示文件對應行數的空行

            

            ? sed ‘/^$/d;G’ FILE

                 空白行則刪除,····

                 效果: 刪除全部空行,非空行則隔行(補空行)輸出

            

            ? sed 'n;d' FILE

                效果:顯示奇數行

            

            ? sed -n '1!G;h;$p' FILE

                效果: 逆序

    

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

(0)
ldt195175108ldt195175108
上一篇 2016-08-10 10:15
下一篇 2016-08-10 10:15

相關推薦

  • class13 shell編程(五)軟件包管理(三)

    一、shell編程(五) 位置變量補充 shift (踢掉參數) shift                #! /bin/bashecho "1st arg …

    Linux干貨 2016-08-24
  • 跟著vimtutor走來認識vim

        一、前言        VIM是一款在vi上進行改進的功能性強大的,開源的文本編輯器。     二、vim的設計理念     vim的設計理念是組合;       命令組合:類似于linux的由一個個單一功能的程…

    Linux干貨 2016-05-13
  • N26-博客作業-week9

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # declare -i nologin_num=0,login_num=0 for i in $(cut -d: -f7 /etc/passwd); do if …

    Linux干貨 2017-04-01
  • 馬哥教育網絡班22期+第7周課程練習

    1、創建一個10G分區,并格式為ext4文件系統; [root@localhost ~]# fdisk /dev/sda 命令(輸入 m 獲取幫助):n All primary partitions are in use 添加邏輯分區 5 起始&nb…

    Linux干貨 2016-10-09
  • 用戶和組的相關配置文件

      用戶,是計算機識別使用者身份的一種唯一使用標識。 而現實生活中為了方便人類記憶使用等,用戶名往往是用便于人類識別的語言來記錄的。但事實上計算機并不對人類語言敏感,所以有必要把人類語言跟機器語言對應上。于是,linux給每一個創建用戶提供了一個UID。當使用用戶名登錄時,系統換自動對應UID來識別該用戶身份。 而用戶名與UID的對應信息就儲存在一…

    Linux干貨 2016-10-23
  • yum更多用法及源碼編譯安裝apache和當天作業

    一、yum的更多用法 上篇文章介紹了yum的基礎用法及yum源的基本配置,除此之外yum還有更多的用法,以下將繼續介紹yum的使用方法。 1、yum-config-manager工具,該工具可以自動生成yum的repo文件,而不需要手動創建編寫,使用方法如下: 用法:yum-config-manager [options] [section] -add-re…

    Linux干貨 2016-08-24
欧美性久久久久