linux中sed命令的用法

本篇內(nèi)容主要講解“l(fā)inux中sed命令的用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“l(fā)inux中sed命令的用法”吧!

伍家崗ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數(shù)據(jù)行進行替換、刪除、新增、選取等特定工作,下面先了解一下sed的用法
sed命令行格式為:
         sed [-nefri] ‘command’ 輸入文本        

常用選項:
        -n∶使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN的資料一般都會被列出到螢?zāi)簧稀5绻由?-n 參數(shù)后,則只有經(jīng)過sed 特殊處理的那一行(或者動作)才會被列出來。
        -e∶直接在指令列模式上進行 sed 的動作編輯;
        -f∶直接將 sed 的動作寫在一個檔案內(nèi), -f filename 則可以執(zhí)行 filename 內(nèi)的sed 動作;
        -r∶sed 的動作支援的是延伸型正規(guī)表示法的語法。(預(yù)設(shè)是基礎(chǔ)正規(guī)表示法語法)
        -i∶直接修改讀取的檔案內(nèi)容,而不是由螢?zāi)惠敵觥?nbsp;      

常用命令:
        a   ∶新增, a 的后面可以接字串,而這些字串會在新的一行出現(xiàn)(目前的下一行)~
        c   ∶取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
        d   ∶刪除,因為是刪除啊,所以 d 后面通常不接任何咚咚;
         i   ∶插入, i 的后面可以接字串,而這些字串會在新的一行出現(xiàn)(目前的上一行);
         p  ∶列印,亦即將某個選擇的資料印出。通常 p 會與參數(shù) sed -n 一起運作~
         s  ∶取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規(guī)表示法!例如 1,20s/old/new/g 就是啦!

舉例:(假設(shè)我們有一文件名為ab)
     刪除某行
     [root@localhost ruby] # sed '1d' ab              #刪除第一行 
     [root@localhost ruby] # sed '$d' ab              #刪除最后一行
     [root@localhost ruby] # sed '1,2d' ab           #刪除第一行到第二行
     [root@localhost ruby] # sed '2,$d' ab           #刪除第二行到最后一行

顯示某行
.    [root@localhost ruby] # sed -n '1p' ab           #顯示第一行 
     [root@localhost ruby] # sed -n '$p' ab           #顯示最后一行
     [root@localhost ruby] # sed -n '1,2p' ab        #顯示第一行到第二行
     [root@localhost ruby] # sed -n '2,$p' ab        #顯示第二行到最后一行

使用模式進行查詢
     [root@localhost ruby] # sed -n '/ruby/p' ab    #查詢包括關(guān)鍵字ruby所在所有行
     [root@localhost ruby] # sed -n '/\$/p' ab        #查詢包括關(guān)鍵字$所在所有行,使用反斜線\屏蔽特殊含義

增加一行或多行字符串
     [root@localhost ruby]# cat ab
     Hello!
     ruby is me,welcome to my blog.
     end
     [root@localhost ruby] # sed '1a drink tea' ab  #第一行后增加字符串"drink tea"
     Hello!
     drink tea
     ruby is me,welcome to my blog. 
     end
     [root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
     Hello!
     drink tea
     ruby is me,welcome to my blog.
     drink tea
     end
     drink tea
     [root@localhost ruby] # sed '1a drink tea\nor coffee' ab   #第一行后增加多行,使用換行符
     Hello!
     drink tea
     or coffee
     ruby is me,welcome to my blog.
     end

代替一行或多行
     [root@localhost ruby] # sed '1c Hi' ab                #第一行代替為Hi
     Hi
     ruby is me,welcome to my blog.
     end
     [root@localhost ruby] # sed '1,2c Hi' ab             #第一行到第二行代替為Hi
     Hi
     end

替換一行中的某部分
格式:sed 's/要替換的字符串/新的字符串/g'   (要替換的字符串可以用正則表達式)
     [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g'    #替換ruby為bird
  [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g'        #刪除ruby

     插入
     [root@localhost ruby] # sed -i '$a bye' ab         #在文件ab中最后一行直接輸入"bye"
     [root@localhost ruby]# cat ab
     Hello!
     ruby is me,welcome to my blog.
     end
     bye

     刪除匹配行

      sed -i '/匹配字符串/d'  filename  (注:若匹配字符串是變量,則需要“”,而不是‘’。記得好像是)

     替換匹配行中的某個字符串

      sed -i '/匹配字符串/s/替換源字符串/替換目標(biāo)字符串/g' filename

替換:

-e是編輯命令,用于sed執(zhí)行多個編輯任務(wù)的情況下。在下一行開始編輯前,所有的編輯動作將應(yīng)用到模式緩沖區(qū)中的行上。

sed -e '1,10d' -e 's/My/Your/g' datafile

#選項-e用于進行多重編輯。第一重編輯刪除第1-3行。第二重編輯將出現(xiàn)的所有My替換為Your。因為是逐行進行這兩項編輯(即這兩個命令都在模式空間的當(dāng)前行上執(zhí)行),所以編輯命令的順序會影響結(jié)果。

 

# 替換兩個或多個空格為一個空格

sed 's/[ ][ ]*/ /g' file_name


# 替換兩個或多個空格為分隔符:

sed 's/[ ][ ]*/:/g' file_name
    

# 如果空格與tab共存時用下面的命令進行替換

# 替換成空格

sed 's/[[:space:]][[:space:]]*/ /g' filename

# 替換成分隔符:

sed 's/[[:space:]][[:space:]]*/:/g' filename

 ==============

 

sed命令的調(diào)用:
    在命令行鍵入命令;將sed命令插入腳本文件,然后調(diào)用sed;將sed命令插入腳本文件,并使sed腳本可執(zhí)行
    sed [option] sed命令 輸入文件            在命令行使用sed命令,實際命令要加單引號
    sed [option] -f sed腳本文件 輸入文件     使用sed腳本文件
    sed腳本文件 [option] 輸入文件            第一行具有sed命令解釋器的sed腳本文件
    option如下:
      n 不打印; sed不寫編輯行到標(biāo)準(zhǔn)輸出,缺省為打印所有行(編輯和未編輯),p命令可以用來打印編輯行
      c 下一命令是編輯命令,使用多項編輯時加入此選項
      f 如果正在調(diào)用sed腳本文件,使用此選項,此選項通知sed一個腳本文件支持所用的sed命令,如
          sed -f myscript.sed input_file  這里myscript.sed即為支持sed命令的文件
    使用重定向文件即可保存sed的輸出

使用sed在文本中定位文本的方式:
    x       x為一行號,比如1
    x,y     表示行號范圍從x到y(tǒng),如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     使用替換模式替換相應(yīng)模式
    a/     在定位行號后附加新文本信息        r     從另一個文本中讀文本
    i/     在定位行號后插入新文本信息        w     寫文本到一個文件
    d      刪除定位行                      q     第一個模式匹配完成后退出或立即退出
    l      顯示與八進制ASCII代碼等價的控制字符        y  傳送字符
    n      從另一個文本中讀文本下一行,并附加在下一行   {}     在定位行執(zhí)行的命令組
    g      將模式2粘貼到/pattern n/

基本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
    附加文本:(創(chuàng)建sed腳本文件)chmod u+x script.sed,運行時./script.sed temp.txt
        #!/bin/sed -f
        /name1/ a/             #a/表示此處換行添加文本
        HERE ADD NEW LINE.     #添加的文本內(nèi)容
    插入文本: /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
             結(jié)果將在source字符串前面加上"ADD BEFORE",這里的&表示找到的source字符并保存
    sed結(jié)果寫入到文件: 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'         刪除以句點結(jié)尾行
    '-e /abcd/d'       刪除包含abcd的行
    's/[][][]*/[]/g'   刪除一個以上空格,用一個空格代替
    's/^[][]*//g'      刪除行首空格
    's//.[][]*/[]/g'   刪除句號后跟兩個或更多的空格,用一個空格代替
    '/^$/d'            刪除空行
    's/^.//g'          刪除第一個字符,區(qū)別  's//.//g'刪除所有的句點
    's/COL/(.../)//g'  刪除緊跟COL的后三個字母
    's/^////g'         刪除路徑中第一個/

///////////////////////////////////////////////////////////////////////

、使用句點匹配單字符    句點“.”可以匹配任意單字符?!?”可以匹配字符串頭,也可以是中間任意字符。假定正在過濾一個文本文件,對于一個有1 0個字符的腳本集,要求前4個字符之后為X C,匹配操作如下:. . . .X C. . . .
2、在行首以^匹配字符串或字符序列    ^只允許在一行的開始匹配字符或單詞。在行首第4個字符為1,匹配操作表示為:^ . . . 1
3、在行尾以$匹配字符串或字符    可以說$與^正相反,它在行尾匹配字符串或字符, $符號放在匹配單詞后。如果在行尾匹配單詞j e t 0 1,操作如下:j e t 0 1 $    如果只返回包含一個字符的行,操作如下:^ . $
4、使用*匹配字符串中的單字符或其重復(fù)序列    使用此特殊字符匹配任意字符或字符串的重復(fù)多次表達式。
5、使用/屏蔽一個特殊字符的含義    有時需要查找一些字符或字符串,而它們包含了系統(tǒng)指定為特殊字符的一個字符。如果要在正則表達式中匹配以* . p a s結(jié)尾的所有文件,可做如下操作:/ * / . p a s
6、使用[]匹配一個范圍或集合     使用[ ]匹配特定字符串或字符串集,可以用逗號將括弧內(nèi)要匹配的不同字符串分開,但并不強制要求這樣做(一些系統(tǒng)提倡在復(fù)雜的表達式中使用逗號),這樣做可以增 加模式的可讀性。使用“ -”表示一個字符串范圍,表明字符串范圍從“ -”左邊字符開始,到“ -”右邊字符結(jié)束。假定要匹配任意一個數(shù)字,可以使用:[ 0 1 2 3 4 5 6 7 8 9 ]    要匹配任意字母,則使用:[ A - Z a - z ]表明從A - Z、a - z的字母范圍。
7、使用/{/}匹配模式結(jié)果出現(xiàn)的次數(shù)    使用*可匹配所有匹配結(jié)果任意次,但如果只要指定次數(shù),就應(yīng)使用/ { / },此模式有三種形式,即:
    pattern/{n/} 匹配模式出現(xiàn)n次。
    pattern/{n,/} 匹配模式出現(xiàn)最少n次。
    pattern/{n,m} 匹配模式出現(xiàn)n到m次之間,n , m為0 - 2 5 5中任意整數(shù)。
    匹配字母A出現(xiàn)兩次,并以B結(jié)尾,操作如下:A / { 2 / } B匹配值為A A B    匹配A至少4次,使用:A / { 4 , / } B

 

===============

替換單引號為空:

可以這樣寫:
sed 's/'"'"'//g' 

sed 's/'\''//g'

sed s/\'//g

 

==============

在文件的第一行前面插入一行abc

sed -i '1i\abc' urfile

到此,相信大家對“l(fā)inux中sed命令的用法”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享題目:linux中sed命令的用法
文章地址:http://bm7419.com/article12/pccodc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄品牌網(wǎng)站設(shè)計、移動網(wǎng)站建設(shè)、網(wǎng)站制作、小程序開發(fā)、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名