淺談 sed

sed 是linux命令中用於數據處理的工具,能處理來自管道或者文件的輸入。linux

語法: sed [選項] '[過濾字符][{]處理命令[}]',其中 []包圍的表示不是強制必寫。正則表達式

  • "過濾字符"的格式是/字符串/,'/'不能省略
  • "處理命令"若是是多個的話用分號";"隔開,用'{}'包圍,若是有多個處理命令,至關於一個命令集。

1. sed能對行進行處理緩存

  1. 選項有以下幾種經常使用的:

    -n: 安靜模式,只輸出作過處理的行,不然會重複輸出處理的行。安靜模式下只有顯示的使用p纔會輸出到屏幕上。app

    -e: 後面緊接處理命令,一次執行一個,後面還能夠繼續使用這個選項執行其餘命令,避免使用管道或者不能多個命令同時使用的狀況編輯器

    -f: 後面接腳本文件工具

    -r: 在處理命令中使用擴展正則表達式,默認是基礎正則表達式spa

    -i: 以文件做爲輸出,即直接修改文件,而不會輸出到到屏幕ip

    -c: 在-i的狀況下,使用複製方式而不是直接修改文件的全部關係(ownership),應該就是不會修改文件的owner字符串

  2. 處理命令有下面幾種(若是不執行如下命令只要在命令前加!,例如'1!p'表示第一行不打印,其餘命令相似):基礎

    p: 打印輸出行,語法--> 'm,np',其中m,n是行號,最後一行用$表示,若是是一行則爲'mp',若是m,n都沒有值則表示當前行。例如第2到7行-->'2,7p',第5到最後                一行-->'5,$p'

    i: 在某行以前插入內容,語法-->'mi xxxx',其中m爲行號,例如在第三行以前插入hello--> '3i hello'

    a: 在某行以後插入內容,語法相似i-->'ma xxxx',其中m爲行號,例如在第三行以後插入nihao-->'3a nihao'

    d: 刪除某些行,語法--> 'm,nd',其中m,n是行號,相似p中的定義,例如刪除2到5行-->'2,5d'

    s:  替換行中的某些內容,語法--> 'm,ns/regEx/replace/[g]',其中m,n相似p中的定義,regEx是要被替換的內容,能夠是正則表達式,replace是要替換的內容,g代                 表所有都要處理,若是沒有則只是替換從左到右的第一個匹配項

    q/Q: 結束處理命令,後面的行將不會再處理。語法'q'。

    n: 從流中讀取下一行到pattern space進行處理,後面的命令將會只會處理下一行。

    N: 從流中讀取下一行擴展到pattern space一塊兒處理,後面的命令會一塊兒處理當前行和下一行。

    w: 把當前的pattern space寫入文件,語法-->'w xxx',xxx表明文件名。

    W: 把當前的pattern space第一行寫入文件,語法-->'w xxx',xxx表明文件名。

注意:sed是以行爲單位的流編輯器,因此命令每次都從流裏讀取一行放到模式空間(Pattern space),處理一行完了就會輸出模式空間的內容到屏幕(除非設置安       靜模式-n)並清理模式空間,再重複下一行,因此模式空間就像一個臨時工做緩存,以行爲單位。這裏還有一個緩存,叫保留空間(Hold space),這個緩存不會被       清除,能夠保存一些想被跨行共享的數據。它倆之間能夠相互轉存,經過如下命令

    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.  --> 相互交換內容

相關文章
相關標籤/搜索