簡單介紹shell編程四劍客之sed

概要:分別的做用html

grep:文本過濾(模式:pattern)工具,grep,egrep,fgrep,擅長過濾。linux

sed:stream editor 文本編輯工具;(流編輯器),擅長取行、替換。web

awk:linux上的實現gawk,文件報告生成器;(獨立的編程語言),過濾內容,擅長取列。shell

find: linux上實時查找工具,經過便利指定路徑下得文件系統完成文件查找。編程

 

參考一、:《曝光linux企業運維實戰》運維

參考二、:http://www.javashuo.com/article/p-bjwroqll-ee.html編程語言

 

1、sed

  sed是一個非交互式文本編輯器,它可對文本文件和標準輸入進行編輯編輯器

  一、語法工具

    sed  [-options] ['commands']  filename;spa

  sed工具默認處理文本,文本內容輸出屏幕已經修改,可是文件內容沒有修改,須要加-i參數,對文件進行完全修改

  二、參數及命令

 

    x:指定行號

    x,y:指定從x到y的行號範圍

    /pattern/:查詢包含模式的行

    /pattern/pattern/:查詢包含兩個模式的行

    /pattern/,x:從與pattern的匹配行到x號行之間的行

    x,/pattern/:從x號行到與pattern的匹配行之間的行

    x,y!:查詢不包括x和y行號的行

    r:從另外一個文件中讀文件

    w:將文本寫入到一個文件

    y:變換字符

    q:第一個模式匹配完成後退出

    l:顯示與八進制ASCII碼等價的控制字符

    {}:在定位行執行的命令組

    p:打印匹配行

    P:打印模板塊的行

    =:打印文件行號

    a\:在定位行號以後追加文本信息

    i\:在定位行號以前插入文本信息

    d:刪除定位行

    D:刪除模板快第一行

    c\:用新文本替換定位文本

    s:使用替換模式替換相應模式

    n:讀取下一個輸入行,用下一個命令處理新的行

    N:將當前都入行的下一行讀取到當前的模式空間

    h:將模式緩衝區的文本賦值到保持緩衝區

    H:將模式緩衝區的文本追加到保持緩衝區

    x:互換模式緩衝區和保持緩衝區的內容

    g:將保持緩衝區的內容賦值到模式緩衝區

    G:將保持緩衝區的內容追加到模式緩衝區

    

   三、元字符集

    ^ :匹配行開始,/^sed/

    $:匹配行結束

    .:匹配一個非換行符的任意字符,如:/s.d/匹配s後接一個任意字符,最後是d

    *:匹配0個或多個字符,/*sed/

    []:匹配一個指定範圍內的字符/[sS]ed/

    [^]:匹配一個不在指定範圍內的字符,/[^A-RT-Z]E/匹配A-R和T-Z的一個字幕開頭,緊跟ed 的行

    (..):匹配子串,保存匹配的字符,如s/(abc)de/\1rs,abcde被替換成abcrs。

    &:保存搜索字符用來替換其餘字符,s/abc/&/,abc成abc

    <:匹配單詞的開始,如:/<abc/匹配包含以abc開頭的單詞的行

    >:匹配單詞的結束

    x{m}:重複字符x,m次,/0{5}/匹配包含5個0的行

    x{m,}:重複字符x,至少m次

    x{m,n}:重複字符x,至少m次,很少於n次

 

2、練習案例

  一、替換abc.txt文本中abc爲ddd

sed 's/abc/ddd/g' abc.txt

 

  二、打印abc.txt文本第一行到第三行

sed -n '1,3p' abc.txt

 

  三、打印abc.txt文本中第一行與最後一行

sed -n '1p; $p' abc.txt

 

  四、刪除abc.txt文本第一行至第三行、刪除匹配行至最後一行

sed  '1,3d' abc.txt  
sed '/df/,$d' abc.txt

 

  五、刪除abc.txt文本最後6行及刪除最後一行

?

 sed  '$d' abc.txt

 

  六、刪除abc.txt最後6行

不會作,有沒有會的????????

  七、在abc.txt查找abc所在行,並在其下一行添加word字符,a表示在其下一行添加字符串

sed '/abc/aword' abc.txt

 

  八、在abc.txt查找ddd所在行,並在其上一行添加word字符,i表示在其上一行添加字符串

sed '/aaa/iword' abc.txt

 

  九、在abc.txt查找以.aaa結尾的行,在其行尾添加字符串word,$表明結尾標識,&在sed中表示添加

sed 's/aaa$/&word/g' abc.txt 

 

  十、在abc.txt查找web的行,在其行首添加字符串www,^表示起始標識,&表示添加

sed '/web/s/^/&www/' abc.txt 

 

  十一、多個sed命令組合,使用-e參數

sed -e '/www.zxg.com/s/^/&1./' -e 's/www.zxg.com$/&./g' abc.txt  
ddd

 

  十二、多個sed命令組合,使用「;」分割,效果跟上面同樣

sed -e '/www.zxg.com/s/^/&1./;s/www.zxg.com$/&./g' abc.txt  

 

  1三、sed讀取系統變量,進行變量替換

sed "s/www.zxg.com/$WEBSITE/g" abc.txt

 

  1四、修改SELinux策略,enforcing爲disabled,查找/SELINUX/行,而後將其行enforcing值改成disabled,!s表示不包括SELINUX行

sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config

 

3、sed高級語法

  一、N、D、P:處理多行模式空間的問題

  二、H、h、G、g、x:將模式空間的內容放入存儲空間以便接下來的編輯

  三、 :、b、t:在腳本中實現分支與條件結構

 實例:

   一、在abc.txt每行後加入空行,也即每行佔用兩行空間,每一行後邊插入一行空行、兩行空行即前三行每行後插入空行

  

sed '/^$/d;G' abc.txt
sed '/^$/d;G;G' abc.txt 
sed '/^$/d;1,3G;' abc.txt  

  

    二、將abc.txt偶數行刪除及隔兩行刪除一行

sed 'n;d' abc.txt
sed 'n;n;d'  abc.txt

    三、在abc.txt匹配行前一行、後一行插入空行以及同時在匹配先後插入空行

sed '/abc/{x;p;x}' abc.txt
sed '/abc/G' abc.txt
sed '/abc/{x;p;x;G}' abc.txt  

    四、在abc.txt每行前加入順序數字序號、加上製表符 "\t"即 "."符號

[root@web1 sed]# sed = abc.txt|sed 'N;s/\n/ /'
1 ddd
2 www.zxg.com
3 web
4 aaaa
5 aaa
6 bdc
7 abc
8 ac
9 ab
10 dfadfsfaklfjksdaf
11 adfafdfasfdfadsfs
12 aaaaaaaaaaaaaaa
13 bbbbbbbbbbbbbbbbbb
14 cccccccccccccccccccc
15 C
[root@web1 sed]# sed = abc.txt|sed 'N;s/\n/\t/'
1       ddd
2       www.zxg.com
3       web
4       aaaa
5       aaa
6       bdc
7       abc
8       ac
9       ab
10      dfadfsfaklfjksdaf
11      adfafdfasfdfadsfs
12      aaaaaaaaaaaaaaa
13      bbbbbbbbbbbbbbbbbb
14      cccccccccccccccccccc
15      C
[root@web1 sed]# sed = abc.txt|sed 'N;s/\n/\./'
1.ddd
2.www.zxg.com
3.web
4.aaaa
5.aaa
6.bdc
7.abc
8.ac
9.ab
10.dfadfsfaklfjksdaf
11.adfafdfasfdfadsfs
12.aaaaaaaaaaaaaaa
13.bbbbbbbbbbbbbbbbbb
14.cccccccccccccccccccc
15.C
[root@web1 sed]# 

 

    五、刪除abc.txt行前和行尾的任意空格

[root@web1 sed]# sed 's/^[ \t]*//;s/[ \t]*$//' abc.txt
ddd
www.zxg.com
web
aaaa
aaa
bdc
abc
ac
ab
dfadfsfaklfjksdaf
adfafdfasfdfadsfs
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
cccccccccccccccccccc
C
[root@web1 sed]# cat abc.txt 
ddd
www.zxg.com
web
   aaaa
aaa   
   bdc
abc
ac
ab
dfadfsfaklfjksdaf
adfafdfasfdfadsfs
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
cccccccccccccccccccc
C
[root@web1 sed]# 

    

    六、打印abc.txt關鍵詞abc與ab之間的內容

[root@web1 sed]# sed -n '/abc/,/ab/'p abc.txt
abc
ac
ab
[root@web1 sed]# 

    七、打印及刪除abc.txt最後兩行

[root@web1 sed]# sed '$!N;$!D' abc.txt
cccccccccccccccccccc
C
[root@web1 sed]# sed 'N; $!P; $!D; $d' abc.txt
ddd
www.zxg.com
web
   aaaa
aaa   
   bdc
abc
ac
ab
dfadfsfaklfjksdaf
adfafdfasfdfadsfs
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
[root@web1 sed]# 

 

  

轉載請註明出處:http://www.javashuo.com/article/p-qlblhace-de.html 

相關文章
相關標籤/搜索