unix的sed 用法介紹

sed是一個非交互性性文本編輯器,它編輯文件或標準輸入導出的文件拷貝。標準輸入多是來自鍵盤、文件重定向、字符串或變量,或者是一個管道文件。sed能夠隨意編輯小或大的文件,有許多sed命令用來編輯、刪除,並容許作這項工做時不在現場。sed一次性處理全部改變,於是變得頗有效,對用戶來講,最重要的是節省了時間sed必須經過行號和正則表達式指定要改變的文本行正則表達式

sed怎樣讀取數據:
    sed從文件的一個文本行或從標準輸入的幾種格式中讀取數據,將之拷貝到一個編輯緩衝區,而後讀命令行或腳本的第一條命令,並使用這些命令查找模式或定位行號編輯它,重複過程直到命令結束
shell

sed命令的調用:
    在命令行鍵入命令;將sed命令插入腳本文件,而後調用sed;將sed命令插入腳本文件,並使sed腳本可執行
    sed [option] sed命令 輸入文件            在命令行使用sed命令,實際命令要加單引號
    sed [option] -f sed腳本文件 輸入文件     使用sed腳本文件
    sed腳本文件 [option] 輸入文件            第一行具備sed命令解釋器的sed腳本文件
    option以下
      n 不打印; sed不寫編輯行到標準輸出,缺省爲打印全部行(編輯和未編輯),p命令能夠用來打印編輯行
      c 下一命令是編輯命令,使用多項編輯時加入此選項
      f 若是正在調用sed腳本文件,使用此選項,此選項通知sed一個腳本文件支持所用的sed命令,如
          sed -f myscript.sed input_file  這裏myscript.sed即爲支持sed命令的文件
    使用重定向文件便可保存sed的輸出
編程

使用sed在文本中定位文本的方式:
    x       x爲一行號,好比1
    x,y     表示行號範圍從x到y,如2,5表示從第2行到第5行
    /pattern/    查詢包含模式的行,如/disk/或/[a-z]/
    /pattern/pattern/   查詢包含兩個模式的行,如/disk/disks/
    /pattern/,x  在給定行號上查詢包含模式的行,如/disk/,3
    x,/pattern/  經過行號和模式查詢匹配行,如 3,/disk/
    x,y!    查詢不包含指定行號x和y的行
編輯器

基本sed編輯命令:
    p      打印匹配行                      c\    用新文本替換定位文本
    =      顯示文件行號                    s     使用替換模式替換相應模式
    a\     在定位行號後附加新文本信息        r     從另外一個文本中讀文本
    i\     在定位行號後插入新文本信息        w     寫文本到一個文件
    d      刪除定位行                      q     第一個模式匹配完成後退出或當即退出
    l      顯示與八進制ASCII代碼等價的控制字符        y  傳送字符
    n      從另外一個文本中讀文本下一行,並附加在下一行   {}     在定位行執行的命令組
    g      將模式2粘貼到/pattern n/
spa

基本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
    從shell向sed傳值: 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'         刪除路徑中第一個\
ip

相關文章
相關標籤/搜索