1. 程式人生 > >sed基礎用法

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/// :查詢替換,支援首頁其它分隔符[email protected]@@ ,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 ”可以使用對個命令用;號分隔