sed在處理文字時是逐行讀取檔案內容,讀到匹配的行就根據指令操作,不匹配就跳過。
sed是linux下一款功能強大的非互動流式文字編輯器,可以對文字檔案進行增、刪、改、查等操作,支援按行、按欄位、按正則匹配文字內容,靈活方便,特別適合於大檔案的編輯。本文主要介紹sed的一些基本用法,並通過shell指令碼演示sed的使用例項。
1. sed的使用方法,呼叫sed命令的語法有兩種:
一.在命令列指定sed指令對文字進行處理:sed +選項 『指令』 檔案
二.先將sed指令儲存到檔案中,將該檔案作為引數進行呼叫:sed +選項 -f 包含sed指令的檔案 檔案
-e:它告訴sed將下乙個引數解釋為乙個sed指令,只有當命令列上給出多個sed指令時才需要使用-e指令。
-f:其後跟儲存sed指令的檔案。
-i:直接對內容進行修改,不加-i時預設只是預覽,不會對檔案進行實際修改。
-n:取消預設輸出,sed缺省會輸出所有文字內容,使用-n引數後直線式處理過的行。
命令說明
a追加,在匹配行的後面插入內容。
c更改,更改匹配行的內容
i插入,在匹配行的前插入內容。
d刪除,刪除匹配的內容。
s替換:替換掉匹配的內容。
p列印,列印出匹配的內容,通常與-n選項一起使用。
=列印被匹配行的行號。
n讀取下一行,遇到n時會自動跳入下一行。
r,w讀和寫編輯命令,r用於將內容讀入檔案,w用於將匹配內容寫入到檔案。
例項:向檔案中新增或者插入行
sed
'3ahello' test.txt #在第三行後面新增hello,3表示行號
sed'/123/ahello' test.txt #向內容123後面新增hello,如果檔案中有多行包括123,則每一行後面都會新增
sed'$ahello' test.txt #在最後一行新增hello,$表示最後一行
sed'3ihello' test.txt #在第三行之前插入hello
sed'/123/ihello' test.txt #在包含123的行之前插入hello,如果有多行包含123,則包含123的每一行之前都會插入hello
sed'$ihello' test.txt #在最後一行之前插入hello
更改檔案中指定行
sed
'1chello' 1.txt #將檔案1.txt的第一行替換為hello
sed'/123/chello' 1.txt #將包含123的行替換為hello
sed'$chello' 1.txt #將最後一行替換為hello
刪除檔案中的行
sed
'4d' 2.txt #刪除第四行
sed'1~2d' 2.txt #從第一行開始刪除,每隔2行就刪掉一行,即刪除奇數行
sed'1,2d' 2.txt #刪除1~2行
sed'1,21d' 2.txt #刪除1~2之外的所有行
sed'$d' 2.txt #刪除最後一行
sed'/123/d' 2.txt #刪除匹配123的行
sed'/123/,$d' 2.txt #刪除從匹配123的行到最後一行
sed'/123/,+1d' 2.txt #刪除匹配123的行及其後面一行
sed'/^$/d' 2.txt #刪除空行
sed'/123\|abc/!d' 2.txt #刪除不匹配123或abc的行,/123\|abc/ 表示匹配123或abc ,!表示取反
sed'1,3' 2.txt #刪除1~3行中,匹配內容123的行,1,3表示匹配1~3行,表示刪除匹配123的行
替換檔案中的內容
sed
's/123/hello/' 1.txt #將檔案中的123替換為hello,預設只替換每行第乙個123
sed's/123/hello/g' 1.txt #將文字中所有的123都替換為hello
sed's/123/hello/2' 1.txt #將每行中第二個匹配的123替換為hello
sed's/123/hello/gpw' 2.txt' 1.txt #'將每行中所有匹配的123替換為hello,並將替換後的內容寫入2.txt
sed'/bb/s/,.*//g' 1.txt #匹配有bb的行,替換匹配行中逗號後的所有內容為空 (,.*)表示逗號後的所又內容
sed's/..$//g' 1.txt #替換每行中的最後兩個字元為空,每個點代表乙個字元,$表示匹配末尾 (..$)表示匹配最後兩個字元
sed's/$/&'haha'/' 1.txt # 在1.txt檔案的每一行後面加上"haha"字段
列印檔案中的行
sed -n '3p' 1.txt #列印檔案中的第三行內容
sed -n '2~2p' 1.txt #從第二行開始,每隔兩行列印一行,波浪號後面的2表示步長
sed -n '$p' 1.txt #列印檔案的最後一行
sed -n '1,3p' 1.txt #列印1到3行
sed -n '3,$p' 1.txt #列印從第3行到最後一行的內容
sed -n '/you/p' 1.txt #逐行讀取檔案,列印匹配you的行
sed -n '/bob/,3p' 1.txt #逐行讀取檔案,列印從匹配bob的行到第3行的內容
sed -n '1,/too/p' 1.txt #列印第一行到匹配too的行
sed -n '3,/you/p' 1.txt #只列印第三行到匹配you的行
sed -n '/too/,$p' 1.txt #列印從匹配too的行到最後一行的內容
sed -n '/too/,+1p' 1.txt #列印匹配too的行及其向後一行,如果有多行匹配too,則匹配的每一行都會向後多列印一行
sed -n '/bob/,/too/p' 1.txt #列印從匹配內容bob到匹配內容too的行
列印檔案的行號
sed -n "$=" 1.txt #列印1.txt檔案最後一行的行號(即檔案有多少行,和wc -l 功能類似)
sed -n '/error/=' 1.txt #列印匹配error的行的行號
從檔案中讀取內容
sed
'r 2.txt' 1.txt #將檔案2.txt中的內容,讀入1.txt中,會在1.txt中的每一行後都讀入2.txt的內容
sed'3r 2.txt' 1.txt #在1.txt的第3行之後插入檔案2.txt的內容(可用於向檔案中插入內容)
sed'/245/r 2.txt' 1.txt #在匹配245的行之後插入檔案2.txt的內容,如果1.txt中有多行匹配245則在每一行之後都會插入
sed'$r 2.txt' 1.txt #在1.txt的最後一行插入2.txt的內容
向檔案中寫入內容
sed -n 'w 2.txt' 1.txt #將1.txt檔案的內容寫入2.txt檔案,如果2.txt檔案不存在則建立,如果2.txt存在則覆蓋之前的內容
sed -n '2w 2.txt' 1.txt #將檔案1.txt中的第2行內容寫入到檔案2.txt
sed -n -e '1w 2.txt' -e '$w 2.txt' 1.txt #將1.txt的第1行和最後一行內容寫入2.txt
sed -n -2 '1w 2.txt' -e '$w 3.txt' 1.txt #將1.txt的第1行和最後一行分別寫入2.txt和3.txt
sed -n '/123\|abc/w 2.txt' 1.txt #將1.txt中匹配abc或123的行的內容,寫入到2.txt中
sed -n '/666/,$w 2.txt' 1.txt #將1.txt中從匹配666的行到最後一行的內容,寫入到2.txt中
sed -n '/xyz/,+2w 2.txt' 1.txt #將1.txt中從匹配xyz的行及其後2行的內容,寫入到2.txt中
linux命令之sed命令詳解
1.sed簡介 2.定址 可以通過定址來定位你所希望編輯的行,該位址用數字構成,用逗號分隔的兩個行數表示以這兩行為起止的行的範圍 包括行數表示的那兩行 如1,3表示1,2,3行,美元符號 表示最後一行。範圍可以通過資料,正規表示式或者二者結合的方式確定 3.sed命令與選項 呼叫sed命令有兩種形式...
Linux之Sed命令詳解
3.sed命令 呼叫sed命令有兩種形式 sed options command file s sed options f scriptfile file s a 在當前行後面加入一行文字。b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾。c 用新的文字改變本行的文字...
linux之sed命令詳解
sed是stream editor的簡稱,也就是流編輯器。它一次處理一行內容,處理時,把當前處理的行儲存在臨時緩衝區中,稱為 模式空間 pattern space 接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變...