sed簡單使用介紹

2021-07-31 17:32:52 字數 2548 閱讀 5939

sed起源於行編輯器ed,sed用於專門執行指令碼的,sed不可以互動使用,

sed是面向字元流的(區別於螢幕編輯器,vi,vim ,nano等)

螢幕編輯器直接將檔案讀入記憶體,或檔案的一部分讀入記憶體,但是當檔案體積過大時,可能造成記憶體不足等情況

面向字元流的編輯器,每次預設讀取一行,輸入流通過程式處理並輸出到標準輸出,輸入可以來自檔案 也可以來自標準輸入,輸出預設是標準輸出,sed通過解釋指令碼工作,指令碼定義了要執行的工作, ,預設情況下到sed的所有匹配的輸入都會經過相應的處理,並轉化為標準輸出,但輸入檔案不發生變化

執行過程

每次讀取一行,將讀取的內容放入記憶體中的特定空間中(即:模式空間).

然後並檢測當前行是否符合匹配條件(或多條匹配條件中的某些條條件),

如果符合執行條件則執行命令中的當前命令,然後繼續後續檢測,

如果不符合條件則跳過本條條件及命令,進行後續檢測

所有的條件匹配完成後,sed輸出模式空間中的內容.繼續讀取下一行,直到檔案無法讀取(即檔案結束) sed的記憶體空間可以分為,模式空間和保持空間,(a,i,d,c,s,p等)命令可對模式空間的文字內容進行修改操作,(h,g,x,n)命令對模式空間與爆出空間的內容進行整體移動操作(及移動,覆蓋,追加)

語法:

sed 選項 範圍 命令 file

注:命令列的所有命令都會由shell優先解釋後在傳入sed命令中,在不需要shell做轉換時,指定範圍命令時盡可能使用單引號,選項

-n 關閉預設輸出

-e 多條語句同時執行

-f 從檔案中讀取命令

-r 支援能擴充套件的正規表示式

-i.bak 備份原始檔為.bak字尾,將更改生效到檔案

範圍 格式 匹配條件1,匹配條件2

從匹配條件1的行開始[ ; 至匹配條件2的行結束] (表示閉區間)

範圍為空將匹配全部行 (所以條件只是為了約束 匹配範圍).

只存在乙個匹配條件時,則表示符合該條件的行

匹配條件的幾種表示方法

數字行號  , 到  10 , 25 從10 到 25

正則匹配 / / 匹配 關鍵字 / / ,/ /

第一開始到第二結尾,第乙個關鍵字類似於開啟,後面的都會執行命令 直到第二個匹配條件出現,匹配結束,

若無第二個匹配條件出現,則將一直執行到程式結束

$ 最後一行

+增量 1,+20 表示1到21 行

~步長 1~2 1 3 5

每次範圍匹配結束後如果檔案未讀取完成則再次執行範圍匹配

命令命令

多條命令之間可以使用 ; 進行分割

如 sed 'p;d' sed '1~2p;1~2d'

c替換行

格式:sed "3,6c\ *****" 替換3-6行為指定行(替換後3-6行為1行)

w儲存:

格式 sed "3,6w ww" 儲存3-6行的內容至ww檔案沒有檔案則建立 (當前目錄下)

r讀檔案:

格式 sed "3,6r /dev/issue" 讀取檔案內容,追加到匹配的行後,每一行後面都會被追加完整的(讀入的檔案)檔案內容

d刪除匹配到的行:

格式 sed "3,6d" 刪除3到6行的內容

p列印

格式 sed "3,6p" 列印3到6行的內容,

注:若要只列印3,6行,使用 -n 取消預設dayin

s 替換匹配文字

格式: sed '3,6s/passwd//g(標籤)

標籤: g全域性 p列印 w儲存

將檔案3到6行中的passwd替換為空.g表示是全域性替換(但是唯讀入了一行,一行的全域性)

a在行後追加文字 ( 追加內容都可以使用轉義字元 如 \n \t)

格式: sed "3,6a ==="在3-6 行後分別增加 ===

sed "3,6a\ ===="等價

a\宣告後面是增加的字串,所以可以有空格(會被認為空格也是需要增加的內容)

i在行前增加文字

格式: 同上

= 列印匹配行的行號

格式: sed "3,6=" 列印3-6行的行號

! 對前面匹配的行的結果取反

(即匹配的行取反為不匹配的,不匹配的取反為匹配的)

格式: sed "3,6!p" 取反3-6行(即就不匹配3-6行,這是最終結果,現

n 讀取當前行的下一行覆蓋模式空間

n 讀取當前行的下一行追加模式空間

h 將模式空間中的內容覆蓋至保持空間

h 將模式空間中的內容追加至保持空間

g 將保持空間的內容覆蓋至模式空間

g 將保持空間的內容追加至模式空間

x 將模式空間的內容與保持空間進行互換

d:刪除當前模式空間開端至\n的內容(即第一行),然後進行判斷,模式空間是否為空,不為空則,則放棄之後的命令,執行d之前的命令(相當於進入迴圈體,模式空間為空時迴圈退出),如果為空,則(截斷重新執行也好,執行後續命令也好,模式空間都刪空了,後續命令範圍無法匹配),則繼續讀取下一行(計數器,指標什麼的為標準)重新執行(處理新的一行,不是重新處理文字).

SED簡單使用

sed 全名叫 stream editor,流編輯器,用程式的方式來編輯文字。使用yours替換my,g表示替換改行所有匹配項 sed s my yours g demo.txt 指定行替換 sed 3s my yours g demo.txt 指定多行替換 sed 3,6s my yours g ...

sed命令使用簡單記錄

sed s pattern replace string file sed.txt中對每行的第乙個lifeng用lf替換 sed s lifeng lf sed.txt 原始檔內容不會變的 要替換所有內容,命令尾部加引數g sed s lifeng lf g sed.txt 要從每行的第二處內容進行...

sed命令基本介紹

使用sed命令追加檔案內容 總結 總結 修改用法總結 1 1s old new 2 5,10s old new 3 10,10s old new 4 pattern1 s old new 5 pattern1 pattern2 s old new 6 pattern1 20s old new 7 1...