Shell指令碼的學習 sed

2021-08-04 13:52:03 字數 2514 閱讀 9601

sed是流編輯器,對文字進行批量化處理。

sed option 'script' file1 file2 ...

sed option -f scriptfile file1 file2 ...

sed 處理的檔案既可以由標準輸入重定向得到,也可以當命令列引數傳入,命令列引數可以一次傳入多個檔案,sed會依次處理。sed的編輯命令也可以當命令列引數傳入,也可以寫成乙個指令碼檔案,然後用-f引數指定,編輯命令的格式為:/pattern/action

其中pattern是正規表示式,action是編輯操作。sed程式一行一行讀出待處理檔案,如果某一行與pattern匹配,則執行相應的action,如果一條命令沒有pattern而只有action,這個action將作用於待處理檔案的每一行。

sed主要用來自動編輯乙個或多個檔案;簡化對檔案的反覆操作;sed預設按照basic規範基本匹配。

(1)/pattern/p:列印匹配的行

sed是把待處理檔案的內容聯通處理結果一起輸出到標準輸出,即p命令表示除了把檔案內容列印出來之外還額外列印一遍匹配pattern的行。要想只輸出處理結果,應加上-n選項,這種用法相當於grep命令

例如:有如下file檔案

執行後:

(2)./pattern/d:刪除匹配pattern的行

sed命令不會修改原檔案,刪除命令只表示某些行不列印輸出,而不是從原始檔中刪去。

不開啟原始檔,去除檔案的空行。

刪除符合條件的同時修改原始檔

(3)/pattern/s/pattern1/pattern2/:查詢符合pattern的行,將該行第乙個匹配pattern1的字串替換為pattern2

(4)/pattern/s/pattern1/pattern2/g:查詢符合pattern的行,將該行所有匹配pattern1的字串替換為pattern2

(5)定址

定址用於決定對那些行進行行編輯。位址的形式可以是數字、正規表示式、或二者的結合。如果沒有指定位址,sed將處理輸入檔案的所有行。

例如:列印file檔案第3行和第3行到第六行。

(6)加注釋

例如:在printf那一行加注釋,全部加注釋

全部加注釋,並改變原始檔

(7)加行號

例如:給第二到第四行加行號,全部加行號

sed命令告訴sed如何處理由位址指定的各輸入行,如果沒有指定位址則處理所有的輸入行。

命令:

a\:在當行前後新增一行或多行。多行時除最後一行外,每行

末尾需用"\"續行

c\:用此符號後的新文字替換當前行中文字。多行時除最後一行外,每行末尾需用"\"續行

i\:在當前行之前插入文字。多行時除最後一行外,每行

末尾需用"\"續行d刪除行

h:把模式空間裡的內容複製到暫存緩衝區

h:把模式空間裡的內容追加到暫存緩衝區

g:把暫存緩衝區裡的內容複製到模式空間,覆蓋原有的內容

g:把暫存緩衝區裡的內容追加到模式空間裡,追加在原有內容的後面

p:列印行

q:結束或退出sed

r:從檔案中讀取輸入行

!:對所選行以外的所有行應用命令

s:用乙個字串替換另乙個

g:在行內進行全域性替換

w:將所選的行寫入檔案

x:交換暫存緩衝區與模式空間的內容

y:將字元替換為另一字元(不能對正規表示式使用y命令)

選項:

-n:取消預設的輸出

-f:指定sed指令碼的檔名

5.退出狀態

sed不管是否找到指定的模式,它的退出狀態都是0。只有當命令存在語法錯誤時,sed的退出狀態才不是0。

shell指令碼學習sed

i 替換並儲存 s pattern replace string 只替換第一處 s pattern replace string g 替換所有 s pattern replace string ng 從第n處開始匹配 ex 直接替換文字 clz localhost shell learn sed i...

Shell指令碼學習之sed詳解

linux 1 目錄 sed編輯器逐行處理檔案 或輸入 並將結果傳送到螢幕。具體過程如下 首先sed把當前正在處理的行儲存在乙個臨時快取區中 也稱為模式空間 然後處理臨時緩衝區中的行,完成後把該行傳送到螢幕上。sed每處理完一行就將其從臨時緩衝區刪除,然後將下一行讀入,進行處理和顯示。處理完輸入檔案...

Shell指令碼補充 sed

var 10 a haha echo var 10 echo 10 echo ab 為空 echo b 輸出hahab a abcdcba echo 輸出abcdcba 完全匹配失敗 echo 輸出dcba abc被刪除了 即到第乙個被匹配的c echo a 輸出abcdcba 不會對源資料做修改a...