shell四劍客之sed

2021-10-02 12:19:45 字數 2713 閱讀 1793

sed是乙個非互動式文字編輯器,它一次處理一行內容。

作用:編輯乙個或多個檔案,簡化對檔案的反覆操作、編寫轉換程式等

在處理文字時把當前處理的行儲存在臨時緩衝區中,稱為「模式空間」,緊接著用sed命令處理緩衝區中的內容,處理完後把緩衝區的內容輸出至螢幕或寫入檔案。預設輸出到螢幕的文字已經修改,但檔案內容其實沒有修改,需要修改檔案內容時新增選項-i。

語法格式如下:

sed [-options] [『commands『] filename;

引數說明:

選項-n表示隱藏預設輸出內容

x:指定一行內容,sed -n '1p' test2.sql顯示test2.sql檔案的第一行

x,y:指定從x行號到y行號內容,sed -n '2,4p' test2.sql

n選項:讀取下一行內容並覆蓋當前模式空間

/parttern/:查詢包含模式的行,sed -n '/server version/p' all.sql

/parttern/,/parttern/:查詢包含兩個模式之間的行

/parttern/,x:從與parttern匹配行到x行號之間的行

q:第乙個模式匹配完成後退出

a\:在定位行的下一行新增一行文字資訊

i\:在定位行的上一行新增一行文字資訊

c\:用新文字替換定位的行(可多行)

d:刪除定位行

s:使用模式替換替換相應模式,sed 's/parttern/parttern/g' filename

p列印當前模式空間內容,追加到預設輸出之後

p列印當前模式空間開端至\n的內容,並追加到預設輸出之前。

h:將模式緩衝區的文字複製到保持緩衝區

h:將模式緩衝區的文字追加到保持緩衝區

x:互換模式緩衝區和操持緩衝區的文字

g:將保持緩衝區的內容複製到模式緩衝區

g:將保持緩衝區的內容追加到模式緩衝區

d命令是刪除當前模式空間開端至\n的內容(不再傳至標準輸出)

示例:替換a.txt檔案的old為new:sed 's/old/new/g' a.txt  一行出現多個old時需要g才能完全替換

列印1~3行內容:sed -n '1,3p' a.txt

列印第1行和第三行的內容:sed -n '1;3p' a.txt

列印匹配行到最後一行的內容:sed -n '/pattern/,$/p' a.txt

刪除最後一行:sed  '$d' a.txt

刪除最後3行:for i in `seq 1 3`;do sed -i '$d' a.txt;done

在第一行下新增一行,內容為add newline:sed '1a\add newline' a.txt

在匹配行新增內容:sed '/partter/a\add newline' a.txt或sed '/partter/aadd newline' a.txt

以test結尾的行行尾追加add:sed 's/test$/&add/' a.txt

在行首新增add:sed 's/^/&add/' a.txt

在包含www的行行首新增add:sed '/www/s/^/add' a.txt

在不包含空行行首新增add:sed '/www/!s/^/&add/' a.txt

多個sed命令組合使用-e引數:sed -e 's/^/&add/' -e 's/$/&./' a.txt

或使用';'分隔sed -e 's/^/&add/;s/$/&./' a.txt

通常而言,sed將待處理的行讀入模式空間,指令碼中的  命令  逐行進行處理,直到指令碼執行完畢,然後該行被輸出,模式空間清空,然後重複將待處理的行讀入模式空間(即下一行),知道檔案處理完畢。

1、n、d、p:處理多行模式空間的問題

3、:、b、t:在指令碼中實現分支與條件結構

示例:將檔案a.txt內容改為非空行以1行空行隔開:sed '/^$/d;g' a.txt    嘗試刪除空行,將保持緩衝區的內容追加到模式緩衝區(此時保持緩衝區的內容為空)

將檔案a.txt內容改為非空行以2行空行隔開:sed '/^$/d;g;g' a.txt 

將檔案a.txt內容改為非空行前三行以1行空行隔開:sed '/^$/d;1,3;g' a.txt 

將檔案a.txt內容改為非空行前三行以2行空行隔開:sed '/^$/d;1,3;g;g' a.txt 

在匹配行之前新增空行: sed '/www/' a.txt 

或sed '/a/i\ ' a.txt

在匹配行之後新增空行: sed '/www/g' a.txt  或sed '/www/a\ ' a.txt

在匹配行前後新增空行:sed 'www/ a.txt 或sed  -e '/www/i\ ' -e '/www/a\ ' a.txt

每行前新增序號,序號與內容以tab隔開:sed = a.txt|sed 'n;s/\n/\t/g'   #=為列印行號,n為將當前讀入行的下一行讀到當前模式空間,包含'\n',可以新增多個n,即將多行讀入當前模式空間。

刪除行前後的空格:sed 's/^\s*//;s/\s*$//' a.txt或sed 's/^[\t]*//;s/[\t]*$//' a.txt

刪除檔案最後2行並顯示刪除內容:sed '$!n;$!d;' a.txt    #不懂

sed 'n;$!p;$!d;$d' a.txt  #不懂

兩行合併:sed 'n;s/\n/ /' a.txt

或sed '$!n;s/\n/ /' a  #$!n;如果不是最後一行,則執行n;

h選項說明

shell四劍客之sed

格式 sed nefri 動作 其中n e f r i 動作有a,i,c,p,s n 預設把sed命令執行的結果,與原來的資料一起輸出到螢幕,如果加了 n,則只顯示sed處理後的內容 sed n 1p sed.txt a 在匹配的當前行的後面新增內容,add sed ahelloworld sed....

shell程式設計四劍客之SED

sed options commands filename sed工具預設處理文字,文字內容輸出螢幕已經修改,但是檔案內容其實沒有修改,需要加 i引數即對檔案徹底修改 x x為指定行號 x,y 指定從x到y的行號範圍 pattern 查詢包含模式的行 pattern pattern 查詢包含兩個模式...

shell三劍客之sed

sed命令是文字處理工具,讀取文字內容,根據指定的條件進行處理,對檔案內容進行增刪改查,常與正規表示式進行相互配合使用。他是一種流編輯器,一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為 模式空間 pattern space 接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的...