sed是一種流編輯器,能夠完美的配合正規表示式使用。處理時,把當前處理的行儲存在臨時緩衝區中,稱為「模式空間」(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變,除非你使用重定向儲存輸出。
命令語法:
sed [option]... [input-file]...
常用引數說明:
sed的引數可以分為引數和動作2個類別,引數不用說,動作即表示對檔案進行哪些處理
引數:
-e 一行命令語句,可以執行多條sed命令
-f 後面接sed指令碼的檔名
-h 顯示幫助文件
-n 取消預設的sed輸出
-v 顯示sed版本
動作說明:
a 在當前行下面插入文字
d 刪除指定行,可以是多行如2,5表示刪除2-5行
-i 將處理結果insert到檔案中,會修改檔案內容,慎用
p 列印檔案內容,
s 替換,用於修改檔案內容,通常與g引數一起使用,g表示整行替換。
c 替換指定行
^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行。
$ 匹配行結束,如:/sed$/匹配所有以sed結尾的行。
. 匹配乙個非換行符的任意字元,如:/s.d/匹配s後接乙個任意字元,最後是d。
* 匹配0個或多個字元,如:/*sed/匹配所有模板是乙個或多個空格後緊跟sed的行。
匹配乙個指定範圍內的字元,如/[ss]ed/匹配sed和sed。
[^] 匹配乙個不在指定範圍內的字元,如:/[^a-rt-z]ed/匹配不包含a-r和t-z的乙個字母開頭,緊跟ed的行。
\(..\) 匹配子串,儲存匹配的字元,如s/\(love\)able/\1rs,loveable被替換成lovers。
& 儲存搜尋字元用來替換其他字元,如s/love/**&**/,love這成**love**。
\< 匹配單詞的開始,如:/\\> 匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。
x\ 重複字元x,m次,如:/0\/匹配包含5個0的行。
x\ 重複字元x,至少m次,如:/0\/匹配至少有5個0的行。
x\ 重複字元x,至少m次,不多於n次,如:/0\/匹配5~10個0的行。
案列:
原檔案內容:
[root@server test]# cat test.txt
111222
333444
555
1、在檔案的第5行後面新增一行資料
[root@server test]# sed -e 5a\666 test.txt
111222
333444
555666
#螢幕輸出顯示資料已新增完畢,但實際上資料並沒有寫入檔案
[root@server test]# cat test.txt
111222
333444
555
2、在檔案的第5行後面新增一行資料,並寫入資料
[root@server test]# sed -i 5a\666 test.txt
[root@server test]# cat test.txt
111222
333444
555666
當使用-i引數的時候可以看出,資料已經寫入檔案。如果只是用sed來分析資料,請不要使用-i引數。
3、刪除、新增指定行內容(a、d動作)
nl只是為了方便展示行號,sed可以直接對檔案進行各種操作,不需要管道符
1)指定指定某行-某行內容
[root@server test]# nl test.txt
1111
2222
3333
4444
5555
6666
[root@server test]# nl test.txt |sed '2,5d'
1111
6666
這裡的d就是刪除操作,2,5表示要刪除的行號。
2)刪除某行-末行內容
[root@server test]# nl test.txt |sed '2,$d'
1111
3)在第2行後新增一行hello world
[root@server test]# nl test.txt |sed '2a hello world'
1111
2222
hello world
33334
4445
5556
666
4)在指定行後新增多行內容
[root@server test]# nl test.txt |sed '2a hello world\nhello boy'
1111
2222
hello world
hello boy
33334
4445
5556
666
4、檔案替換(s動作)
替換檔案中符合替換規則的內容
#只替符合規則的行內的第乙個資料
[root@server test]# sed 's/333/aaa/' test.txt
111222
aaa 444
333444
555666
111#全行符合規則的全部替換
[root@server test]# sed 's/333/aaa/g' test.txt
111222
aaa 444 aaa
444555
666111
[root@server test]#
5、sed多點編輯(e引數)
將檔案中的111替換為777,並在第6行後面新增999
[root@server test]# sed -e 's/111/777/g' -e '6a\999' test.txt
777222
333444
555666
999777
6、替換指定行內容(c動作)
將第6行替換為222
[root@server test]# sed -e '6c\222' test.txt
111222
333444
555222
111
備註:以上所有操作加上-i引數均會改變檔案內容,如果只是分析資料,慎用
特殊引數說明:
! #對指定行以外的所有行執行命令
sed命令總結
1.刪除首字母問空的行 2.刪除第二到第八的所有行。3.編寫sed指令碼,替換與行匹配相同的內容,即將boby替換為 boby,但僅替換第二個boby為 boby.root localhost tmp cat test1.txt first web wqeqwe root localhost tmp...
sed命令使用總結
sed命令在處理文字內容的時候,作用非常強大,例如 刪除某行,替換,在某一行的後面增加一行等等功能。假設此時有個文件 test.txt 內容如下 a.a.a.a 10 b.b.b.b 40 c.c.c.c 100 現在我要刪除b.b這一行,命令如下 sed i b.b.b.b 40 d test.t...
Sed命令的使用總結
1 sed刪除行首的空格或tab字元。sed s t g file sed s g file 2 sed輸出字串 列印第三行 3表示等號,p表示列印 sed n 3p etc passwd 列印2至5行 sed n 2,5p etc passwd 從第2行開始,每隔3行列印一行 sed n 2 3p...