shell指令碼(五)

來源:互聯網
上載者:User

標籤:shell指令碼(五)

shell指令碼(五)



4、sed和awk


(1)sed


a、常用參數


#檔案編輯工具,可對文字檔和標準輸入進行編輯,標準輸入可以是鍵盤輸入、

#檔案重新導向、字串、變數、以及管道文本。

#-n:不列印所有行到標準輸出;-e:將下一個字串解析為sed編輯命令

#-f:調用sed指令檔


b、定位文本


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

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

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

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

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

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


c、編輯命令


#p:列印匹配行;=:列印檔案行號;a\:在定位行之後追加文本;

#i\:在定位行之前追加文本;

#d:刪除定位行;c\:用新文本替換定位的文本;s:使用替換模式替換相應模式

#r:從另一個檔案讀取文本;w:將檔案寫入到檔案;y:變換字元;

#q:第一個模式比對之後就退出;

#1:顯示與八進位ascii碼等價控制字元;{}:在定位行執行的命令組;

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


d、例子


#列印第1行,並且列印/不列印檔案所有行

sed ‘1p‘ a.txt

sed -n ‘1p‘ a.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/46/wKiom1V33VTRKyADAADqfpYLAag962.jpg" />

#列印第2行到第4行

sed -n ‘2,4p‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/42/wKioL1V33vniNyHeAAEN19zWcN8690.jpg" />

#列印不在第2到第4行的行

sed -n ‘2,4!p‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/46/wKiom1V33VTB7RgaAAEoB3ZE1q8215.jpg" />

#定位行前1行追加文本

sed ‘/NAME5/i\Add_string" bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/42/wKioL1V33vrSXR5oAADTsThS5Ms598.jpg" />

#定位行後1行追加文本

sed ‘/NAME5/a\add_string‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/46/wKiom1V33VXiPupYAACu9JMJjbY957.jpg" />

#使用Regex需要使用s選項

#同1行定位字串前面追加文本

sed ‘s/name5/addstring&/‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/42/wKioL1V33vvi_uWrAACkSx90f2Y614.jpg" />

#同1行定位字串後面追加文本

sed ‘s/name5/&addstring/‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/42/wKioL1V33vugZJrRAAChIsOeKVs817.jpg" />

#修改定位文本

#將NAME5替換成rp_string

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/46/wKiom1V33VbyII_0AACDp3luL0I277.jpg" />

#將NAME5定位行整行替換成rp_string

sed ‘/NAME5/c\rp_string‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/42/wKioL1V33vzAe7iDAAB-yg0aoXE041.jpg" />

#刪除文本,分別刪除第6行,第2行到第5行

sed ‘6d‘ bkname.txt

sed ‘2,5d‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/42/wKioL1V33vyhOuWbAADBCxhuWDs254.jpg" />

#刪除不在第2到第9行的行,實際就是顯示第2到第9行

sed ‘2,9!d‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/46/wKiom1V33VfRepTmAACbVw4Mk0M151.jpg" />

#參數p和g區別,p:球只替換第1次出現匹配的文本;

#g:表示替換所有出現的匹配的文本

#sed是按行來處理的,所以要刪除1行中多次出現匹配文本的話,需要使用g,注意兩者區別

sed -n ‘s/name/*/p‘ bkname.txt

sed -n ‘s/name/*/g‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/42/wKioL1V33vygtmLtAADMp-Oz4S0032.jpg" />

#字元變換,一一對應替換

#a替換成E,b替換成F,c替換成G,d替換成H

sed ‘y/abcd/EFGH/‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/46/wKiom1V33VjD_l3ZAABdEXOG6_k671.jpg" />

#元字元匹配,定位到最後1行

sed -n ‘$p‘ bkname.txt

sed -n ‘$‘p bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/46/wKiom1V33VjBspAtAABTHX0Fg8U363.jpg" />

#定位以test結尾的行

sed -n ‘/test$/p‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/42/wKioL1V33v3zIQm2AABPHrKKYc4624.jpg" />

#定位行到指定行,如果指定行數值>定位行數值,則會列印

#指定行到最後1行,如指定行8>4(name4所在行數值)

sed -n ‘3,/name4/p‘ bkname.txt

sed -n ‘8,/name4/p‘ bkname.txt

#等價於

sed -n ‘8,$p‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/42/wKioL1V33v7AedRVAAEOf7h07YE981.jpg" />

#定位行到指定行,如果指定行數值>定位行數值,則只會列印定位行

sed -n ‘/name4/,6p‘ bkname.txt

sed -n ‘/name4/,2p‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/46/wKiom1V33VmDhZxQAACbUSf1xMs763.jpg" />

#"!"歎號:表示非,顯示不在第2到第9行的行

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/42/wKioL1V33v7y0sGoAABxxat2olg910.jpg" />

#=:只列印行號

sed -n ‘/name4/=‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/46/wKiom1V33VnhKL3rAAB6XXXUQKc687.jpg" />

#l(小寫L):顯示控制符

sed -n ‘1,$l‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/46/wKiom1V33VnTMQ3FAADXy3UPRyE639.jpg" />

#-e:使用多個編輯命令

sed -n ‘/name4/{p;=}‘ bkname.txt

sed -n -e ‘/name4/p‘ -e ‘/name4/=‘ bkname.txt650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/42/wKioL1V33v6jn9KHAACRBx76xkc695.jpg" />

#n:處理定位行的下一行,對定位行的下1行的"00"替換成"*"

sed ‘/name1/{n;s/00/*/g;}‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/46/wKiom1V33VniibCXAADSHdr9f6M513.jpg" />

#列印定位行的下一行

sed -n ‘/name2/{n;p}‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/42/wKioL1V33v6TSAzJAABSoPwGKDE335.jpg" />

#在定位行執行命令組,注意是對定位行操作

sed ‘/name1/{s/100/*/g;s/name/ttt/g;}‘ bkname.txt

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/43/wKioL1V34cDBnX9SAAC39XNVfpE680.jpg" title="shell.png" alt="wKioL1V34cDBnX9SAAC39XNVfpE680.jpg" />

本文出自 “愛就行動” 部落格,請務必保留此出處http://1055745601.blog.51cto.com/5003160/1660411

shell指令碼(五)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.