天天看點

shell三劍客之sed(一)

  • 引言

  我們不生産水,我們隻是大自然的搬運工。

  我不是在做廣告,我隻是整理sed的時候突然想起了這句話。因為我接下來幾乎就是個搬運工了

shell三劍客之sed(一)

。沒辦法,前人總結的實在是太精辟了。思路清晰,一氣呵成。我浏覽了下,就讓我有種感慨,sed也就這麼點東西。說大話了,請忽略

shell三劍客之sed(一)

  總之一句話,這篇純手打,你也可以說是抄的,我承認,但是能把他變成自己的怎麼都成!要站在别人的肩膀上,才能看的更遠。廢話不多說,上幹貨。

  • 參考資料
  1. man sed 或者 sed --help
  2. 《unix shell 範例精解》
  3. http://www.gnu.org/software/sed/
  • sed,a stream editor

 上面是GRU官方文檔的标題:sed,一個流編輯器,非互動式的編輯器。

  • sed的工作過程

  文本檔案--->sed的模式空間(緩存區)--->顯示輸出

  sed逐行處理檔案(或輸入),将目前處理的行放在sed模式空間裡,在模式空間裡處理完後顯示輸出,并删除模式空間裡的内容。然後将下一行讀入模式空間,處理并輸出。

  我們發現,sed處理的是讀入模式空間裡的檔案副本,不是原檔案。是以使用sed編輯檔案不會對原檔案修改和破壞。

  • sed的工作模式
正規表達式 sed -n '/RE/p' filename
定址 位址可以是數字,正規表達式或者二者結合。
  • 正規表達式元字元
通用 http://1076546426.blog.51cto.com/9959876/1702784
& 儲存查找串以便在替換串中引用
  • sed指令與選項

sed指令

指令 功能 指令 功能
a\ 在目前行之後追加文本
i\ 在目前行之前插入文本
r Append text read from filename.(從檔案中讀入并追加文本)
c\ 用新文本替換目前行中的文本
d 删除行
h/H

Copy/append pattern space to hold space.

将模式空間的内容複制/追加到暫存緩沖區。

g/G Copy/append hold space to pattern space.
x Exchange the contents of the hold and pattern spaces.
l 列出非列印字元
n/N Read/append the next line of input into the pattern space.
p Print the current pattern space.
s###g 全局替換,#為間隔符
w Write the current pattern space to filename.
y y/source/dest/ 将字元串轉換為另一個字元

sed選項

選項 功能
-n 取消預設輸出
-e 允許多項編輯
-f 指定sed腳本檔案
-i 修改原檔案
-r use extended regular expressions in the script.
  • 執行個體
指令 功能
sed -n '/word/p' filename 将filename中所有包含word的行列印的螢幕上
sed '1,3d' file1 >file2 删除file1中1到3行,并将修改結果儲存到file2中
sed -n '1,5p' filename 隻列印1到5行
sed '1,10s#my#your#g' filename 将1至10行中的所有的my替換為your
sed '/my/!d' filename 删除所有不含my的行
sed '/reports/s/5/8' filename 将含有reports行的第一個數字5改為8
sed 's/....//' filename 删除每行的前4個字元
sed 's/....$//' filename 删除每行的後4個字元
sed -n '/word/w file2' flie1 将file1中所有包含word的行寫入file2中

轉載于:https://blog.51cto.com/chboy/1703086