SED命令

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

sed命令:

      文本處理三劍客:

            grep;egrep;fgrep:文本過濾器

            sedStream  EDitor,流編輯器,行編輯器;

            awk:文本格式化工具,報告生成器

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

           地址定界編輯命令

    常用選項:

                    -n:不輸出模式空間中的內容至屏幕;

                    -e script, –expression=script:多點編輯;

                    -f /PATH/TO/SED_SCRIPT_FILE

                    -r, –regexp-extended:支持使用擴展正則表達式:

                    -i [SUFFIX], –in-;lace[=SUFFIX]:直接編輯原文件;

 地址定界:

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

              (2)單地址:

                    #:指定行

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

              (3)地址范圍;

                    #,#

                    #,+#

                    #,/patl/

                      /patl/,/pat2/,…

                    $: 最后一行

              (4)步進:~

                     1~2:所有奇數行

                     2~2:所有偶數行

編輯命令:

          d:刪除

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

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

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

          c \text: 把匹配到的行替換為此處指定的文本“text”;

         w /PATH/TO/SOMEFILE:保存模式空間匹配到的行至指定的文件中;

         r /PATH/FROM/SOMEFILE:讀取指定文件的內容至當前文件被模式匹配到的行后面;即文件合并;

        =:為模式匹配到的行打印行號;

       ?。簵l件取反; 地址定界!編輯命令;

s///:查找替換其分隔符可自行指定,常用的有s@@@,s###等;

            替換標記:

                g:全局替換

                w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中

                p:顯示替換成功的行

高級編輯命令:

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

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

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

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

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

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

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

            d:刪除模式空間中的行;

            D:刪除多行模式空間中的所有行;

 

           示例:

               sed -n ‘n;p’ FILE:顯示偶數行;

               sed ‘1!G;h;$!d’ FILE:逆序顯示文件內容;

               sed ‘$!d’ FILE:取出最后一行;

               sed  ‘$!N;$!D’ FILE:取出文件最后兩行;

               sed ‘/^$/d;G’ FILE:刪除原有的所有空白行,

而后為所有的非空白行后添加一個空白行;

               sed ‘n;d’ FILE:顯示奇數行;

               sed ‘G’ FILE: 在原有的每行后方添加一個空白行;

基本sed編程舉例:

          使用p(rint)顯示行: sed -n ‘2p’  temp.txt   只顯示第2,使用選項n

          打印范圍:  sed -n ‘1,3p’  temp.txt         打印第1行到第3

          打印模式:  sed -n ‘/movie/’p  temp.txt     打印含movie的行

         使用模式和行號查詢:  sed -n ‘3,/movie/’p  temp.txt   只在第3行查找movie并打印

         顯示整個文件:  sed -n ‘1,$’p  temp.txt      $為最后一行

         任意字符:  sed -n ‘/.*ing/’p  temp.txt     注意是.*ing,而不是*ing

          打印行號:  sed -e ‘/music/=’  temp.txt

          附加文本:(創建sed腳本文件) chmod  u+x  script.sed, 運行時 ./script.sed  temp.txt

                 #!/bin/sed -f

                 /name1/ a/             #a/表示此處換行添加文本

                  HERE ADD NEW LINE.     #添加的文本內容

         插入文本: /name1/ a/ 改成 4 i/ 4表示行號,i插入

         修改文本: /name1/ a/ 改成 /name1/ c/ 將修改整行,c修改

         刪除文本: sed ‘1d’ temp.txt  或者 sed ‘1,4d’ temp.txt

        替換文本: sed ‘s/source/OKSTR/’ temp.txt     source替換成OKSTR

                 sed ‘s//$//g’ temp.txt             將文本中所有的$符號全部刪除

                 sed ‘s/source/OKSTR/w temp2.txt’ temp.txt 將替換后的記錄寫入文件temp2.txt

        替換修改字符串: sed ‘s/source/”ADD BEFORE” &/p’ temp.txt

               結果將在source字符串前面加上“ADD  BEFORE”,這里的&表示找到的source字符并保存

       sed結果寫入到文件: sed ‘1,2 w temp2.txt ‘ temp.txt

                     sed ‘/name/ w temp2.txt’  temp.txt

        從文件中讀文本: sed ‘/name/r temp2.txt’  temp.txt

        在每列最后加文本: sed ‘s/[0-9]*/& Pass/g’  temp.txt

        shellsed傳值: echo  $NAME | sed “s/go/$REP/g”   注意需要使用雙引號

快速一行命令:

         ‘s//.$//g’           刪除以句點結尾行

         ‘-e /abcd/d’       刪除包含abcd的行

         ‘s/[][][]*/[]/g’   刪除一個以上空格,用一個空格代替

         ‘s/^[][]*//g’      刪除行首空格

         ‘s//.[][]*/[]/g’   刪除句號后跟兩個或更多的空格,用一個空格代替

         ‘/^$/d’             刪除空行

         ‘s/^.//g’            刪除第一個字符,區別   ‘s//.//g’刪除所有的句點

         ‘s/COL/(…/)//g’  刪除緊跟COL的后三個字母

         ‘s/^////g’            刪除路徑中第一個/

 

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

(0)
MFXMFX
上一篇 2017-05-01 21:04
下一篇 2017-05-01 21:41

相關推薦

  • grep,find等相關命令

    Q1:顯示當前系統上root、fedora或user1用戶的默認shell; ~]# grep -E "^root|^fedora|^user1" /etc/passwd | awk -F: '{print $1,$NF}' ro…

    Linux干貨 2016-11-27
  • Linux 系統終端

    Linux系統的主要終端主要包含:控制臺終端、控制終端、串口終端、偽終端、虛擬終端。 控制臺終端:在Linux 系統中,計算機顯示器通常被稱為控制臺終端(Console)內核將信息送到控制臺終端上(/dev/console), 通過與console相關聯的虛擬終端將信息顯示到屏幕上。再開機過程中屏幕輸出的信息,這個屏幕就是Console; 控制終端:鍵盤,顯…

    Linux干貨 2016-10-19
  • 文本處理和正則表達式練習(0805)

    1、找出ifconfig命令結果中本機的所有IPv4地址     1.1 Centos7     1.2 Centos6 2、查出分區空間使用率的最大百分比值,取各分區利用率的數值 取出各分區數值 取出最大百分比 3、查出用戶UID最大值的用戶名、 UID及shell類型 4、查出/tmp…

    Linux干貨 2016-08-06
  • 如何用SHELL寫好網絡爬蟲

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1550976        上周,老大壓下來任務,讓寫一個網絡爬蟲,負責爬某一個行業網站的數據信息。由于本人只會 sh…

    Linux干貨 2016-08-15
  • 第三周-作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。     ~]# who | cut -d" " -f1 | uniq 2、取出最后登錄到當前系統的用戶的相關信息。     ~]# who |  t…

    Linux干貨 2016-12-14
欧美性久久久久