概要:分別的做用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編程語言
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次
一、替換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]#