sed基礎用法

sed基礎

sed 行編輯器


  • sed 是一種流編輯器,它一次處理一行的內容,處理時把當前處理的行存儲在臨時緩衝區中,稱爲‘模式空間’(pattern space),接着用sed 命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。然後讀入下行,執行下一個循環。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空模式空間,但不會清空保留空間,這樣不斷重複,直到文件末尾。如果不加特定選項原文件內容並不會改變。除非你使用重定向。
  • 功能 :主要用來自動編輯一個或多個文件,簡化對文件的反覆操作,編寫轉換程序等

 用法 : sed [option] … ‘地址命令’ 文件
常用選項

-n :不打印模式空間的內容到屏幕上(默認是打印的)
-e :多點編輯 (sed [optin] -e ” -e ”)
-f :/ PATH/SCRIPT_FILE : 從指定文件中讀取編輯腳本
-r :支持使用擴展正則表達式
-i.bak : 備份文件並原處編輯
地址範圍:
不給地址 :對全文進行處理
單地址 :# :指定的行,$:最後一行
/pattern/:被此處模式所能夠匹配到的每一行
地址範圍 :
#, # :1,3 從第一行到3行
#,+# :3,+5 從第3行到8行。
/pat1/,/pat2/ :符號這兩個正則表達的行
#,/pat1/ :第#行符號這個正則表達式的內容

 ~ :步進 (去文本的奇偶行)

1~2 :奇數行 :從第1行開始,每次加2行 1,3,5…..
2~2 :偶數行 :從第2行開始,每次加2行 2,4,5…..

編輯命令

  • d: 刪除模式空間匹配的行,並立即啓用下一輪循環
  • p: 打印當前模式內容,追加到默認輸出之後
  • a[\]: 在指定行後面追加文本,支持使用\n實現多行追加
  • i[\]: 在行前面插入文本
  • c[\]: 替換行爲單行或者多行文本
  • w /path/somefile : 保存模式匹配的行至指定文件
  • r /path/somefile : 讀取指定文件的文本至模式空間中匹配到的行後
  • = :爲模式空間中的行打印行號
  • !:模式空間中匹配行取反處理
  • s/// :查找替換,支持首頁其它分隔符s@@@ ,s___,s###
  • 替換標記:
    • g :行內全部替換,不加只會替換第一個匹配的
    • #g :替換#個
    • p : 顯示替換成功的行
    • w /PATH/TO/SOMEFILE :將替換成功的行保存至文件中

示列

sed ‘2p’ /etc/passwd 第2行打印兩邊
sed -n ‘2p’ /etc/passwd 只打印第2行
sed -n ‘1,4p’ /etc/passwd 打印1到4行
sed -n ‘/root/p’ /etc/passwd 顯示文本中匹配到的root的行
sed -n ‘2,/etc/passed/p’ 從第二行開始匹配
sed -n ‘/^$/=’ file 顯示匹配的空白行的行號
sed -n -e ‘/^$/p’ -e ‘/^$/=’ file 打印出空白行和顯示出空白行行號
sed ‘/root/i\superman’ /etc/passwd 在/etc/passwd 行前添加一行 文字
sed ‘/root/a\asdf’ /etc/passwd 在匹配行的後添加一行文字
sed ‘/root/c\abc’ /etc/passwd 將匹配的行替換成abc
sed ‘/^&/d’ file 刪除空白行
sed ‘1,10d’ file 刪除第一行到第10行
nl /etc/passwd | sed ‘2,5d’ 刪除2到5行
nl /etc/passwd | sed ‘2a abc’ 在匹配到行後面添加一行爲abc
sed -n ‘s/root/&abc/p’ /etc/passwd 在root單詞後面追加abc 然後 輸出
sed -n ‘s/root/abc&/p’ /tc/passwd 在root單詞前面追加abc
sed ‘s/test/mytest/g’ file 將匹配的文字全行替換
sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets
sed -i.bak ‘s/dog/cat/g’ pets 將dog全行替換成cat ,然後備份原文 件後綴.bak,把模式空間的內容寫入原文件。

高級編輯命令

  • p :打印模式空間開端至\n內容,並追加到默認輸出之前
  • h :把模式空間中的內容覆蓋至保持空間中
  • H :把模式空間的內容追加至保持空間中
  • g :從保持空間中取出內容覆蓋至模式空間中
  • G :從保持空間中取出內容追加到模式空間中
  • x :把模式空間中的內容與保持空間中的內容進行互換
  • n :讀取匹配到的行的下一行覆蓋至模式空間中
  • N :讀取匹配的行的下一行追加至模式空間中
  • d :刪除模式空間中的行
  • D :如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,並不會讀取新的輸入行,而使用合成的模式空間重新啓動循環。如果模式空間不包含換行符,則會像發出d命令那樣啓動正常的新循環
  • sed ”可以使用對個命令用;號分隔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章