金庸武功之“羅漢拳”Linux運維文本處理三劍客之sed命令

一· sed簡介


 與Vi等全屏編輯器不同,sed是一個非交互式的文本編輯器,它可以對文本文件和標準輸入進行編輯,    標準輸入可以來自鍵盤、文件重定向、字符串、變量,甚至來自管道的文本。sed是對文本中的行進行    逐行處理。

   sed只是對緩衝區中原始文件的副本進行編輯,並不編輯源文件。如何需要保存改動的內容,需要將輸    出重定向到另一個文件,可以使用下面格式的命令:

   sed 'sed命令' input-file > result-file

二· sed調用的二種方式:

   1.在shell命令行輸入命令調用sed,格式爲:

      sed [option] 'sed命令' 輸入文件

      例:sed -n    '1,5p'  /etc/inittab

    注意sed命令需要用單引號引起來

   2. ./sed 腳本文件 輸入文件


三· sed 常用的選項

-n : 表示不打印所有行到標準輸出

-e:表示將下一個字符串解析爲sed編輯命令,如果只傳遞一個編輯命令可省略

-r:表示可以使用擴展正則表達式元字符

-i:直接修改原文件

四· 文本定位方式

空爲全局:即不定位行號爲作用全文

x:x爲指定精確行號  

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

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

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

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

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

x,y!:查詢不包括x和y行之間範圍的行

!不能用於關鍵字匹配,無法表示不與/pattern/匹配的行

$: 表示最後一行


例:  sed -n '/\./p' /etc/inittab   匹配 . 符號

         sed -n '$p'   /etc/inittab    打印最後一行

         sed -n '2,10!p' /etc/inittab  打印不在2至10行內的行


五· 基本編輯命令

i \ : 在匹配行的前面插入文本

a \: 在匹配行的後面插入文本

c \:將所匹配的文本行利用新文本替代(整行替換)

d:刪除指定行

w:寫入到一個新文件

r:從文本中讀入文本

y:字符變換,將一系列字符變換爲相應字符,對字符逐個處理

     sed 'y/12345/678910/' input  (被變換的字符序列/變換的字符序列/)

     要求被變換的字符序列和變換的字符序列等長,否則報錯

l:顯示控制字符(非打印字符)

q:完成指定地址的匹配後立即退出

s:將所匹配的文本行利用新文本替換,和c \相比,s可以替換字符串,而c \只能替換整行

     s/被替換的字符串/新字符串/[替換選項]

     s/pattern/string/g

     被替換字符串可以用正則表達式,而新字符串不可以

     如: s/m.*l/lx/g (/符號可以換成@,#,%等符號,s#m.*l#lx#g)

     還可以指定替換第幾次匹配的關鍵字,只需在替換的選項上加相應數字,1-512之間

     如:sed -n 's/mxl/lx/2p' (替換第2次匹配到的mxl字符爲lx)


{}:指定在定位行上能執行的命令組,類似於選項-e    

     例: sed -n '/mxl/p' -e '/mxl/=' /etc/inittab 等價於

             sed -n '/mxl/{p;=}' /etc/inittab

             sed -n '/mxl/{s/m/M/g;s/x/X/g;}' /input












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章