Sed的基本使用

2021-08-29 00:27:02 字數 4086 閱讀 5109

sed   資料流編輯器

sed是一種流編輯器,是文字處理中非常有用的工具,配合正規表示式使用。sed處理時,把當前處理的行儲存在臨時緩衝區中,稱為模式空間(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。sed不修改檔案內容,除非你使用重定向儲存輸出。sed主要用來自動編輯乙個或多個檔案,簡化對檔案的反覆操作,編寫轉換程式等。

常用選項:

-e script 以選項中指定的script來處理輸入的文字檔案

-f  script 以選項中指定的script檔案來處理輸入的文字檔案

-n 顯示scrip處理後的結果

-e 後可跟多個操作

-i 對原始檔進行修改操作

常用命令:

a 在匹配到的行後面追加新行

d 刪除選擇的行

s 替換指定的字元

i 在匹配到的行前面新增新行

r   在匹配到的行後讀檔案 

p 列印模板塊的行

w   匹配到的行寫到檔案(覆蓋)

替換標記:

g 行內全面替換

p 列印行

i 忽略大小寫

y 把乙個字元翻譯成另外的字元

\1 子串匹配標記

& 已匹配字串標記

例項:

準備測試檔案

#!/bin/bash

echo $1

shift

echo $1

shift

echo $1

-n選項 和p命令 只列印符合條件的內容

[root@localhost ~]# sed "1,3p" -n shift.test 

#!/bin/bash

echo $1

a   在匹配到的行後面追加新行   

[root@localhost ~]# sed '/^ec/a \hello wolrd ' shift.test 

#!/bin/bash

echo $1

hello wolrd 

shift

echo $1

hello wolrd 

shift

echo $1

hello wolrd

i   在匹配行前面追加新的行

[root@localhost ~]# sed '/^ec/i \hello wolrd ' shift.test 

#!/bin/bash

hello wolrd

echo $1

shift

hello wolrd

echo $1

shift

hello wolrd

echo $1

在匹配到的行後面追加兩行 \n表示換行

[root@localhost ~]# sed '/^ec/i \hello wolrd\nhello world ' shift.test 

$d  刪除檔案最後一行

$p   輸出最後一行

r   在匹配到的行後讀入檔案 

[root@localhost ~]# cat test

haha,nihao

[root@localhost ~]# sed '/^shift/r ./test' shift.test 

#!/bin/bash

echo $1

shift

haha,nihao

echo $1

shift

haha,nihao

echo $1

shift

haha,nihao

echo $1

w   匹配到的行寫到檔案(覆蓋)

[root@localhost ~]# sed '/^shift/w /new' shift.test    

#!/bin/bash

echo $1

shift

echo $1

shift

echo $1

shift

echo $1

[root@localhost ~]# cat /new

shift

shift

shift

s   查詢並替換  s/匹配模式/要替換內容/  

[root@localhost ~]# sed 's/ec/ce/' shift.test 

#!/bin/bash

ceho $1

shift

ceho $1

shift

ceho $1

shift

ceho $1

[root@localhost ~]# sed '1,3s/ec/ce/' shift.test     指定區間

[root@localhost ~]# sed '1,3s/ec/ce/g' shift.test    全域性

[root@localhost ~]# sed '1,3s/ec/ce/gi' shift.test   忽略大小寫

-f  以選項中指定的script檔案來處理輸入的文字檔案

[root@localhost ~]# cat script 

/^#bind=.*/a \bind=192.168.1.1

/^#port=.*/a \port=3306

[root@localhost ~]# sed -f script mysqld 

[mysqld]

#bind=0.0.0.0

bind=192.168.1.1

#port=3306

port=3306

#password=123456

-e 後可跟多個操作

[root@localhost ~]# sed -e'1,3s/ec/ce/' -e'1,3d' shift.test

例1:①、輸出以root開頭並且以bash結尾的行

[root@localhost ~]# sed '/^root.*bash$/p' -n /etc/passwd     (指某一行)

root:x:0:0:root:/root:/bin/bash

②、輸出以root開頭以bash結尾的行

[root@localhost ~]# sed '/^root/,/bash$/p' -n /etc/passwd     指以root開頭,以bash結尾的區間   (指不同行)  

root:x:0:0:root:/root:/bin/bash            匹配到此行以root開頭,則此行不再繼續往下匹配以bash結尾這個條件,然後取下一行進模式空間,去匹配是否以bash結尾

bin:x:1:1:bin:/bin:/sbin/nologin          中間行

daemon:x:2:2:daemon:/sbin:/sbin/bash       匹配到此行以bash結尾。

例2:\(..\)用於匹配子串,對於匹配到的第乙個子串標記為\1,依此類推匹配到的第二個結果就是\2

先匹配(/總內容/ )  在分組 \(內容\)   從左往右,從外到裡

[root@localhost ~]# sed 's/\(f\)\( l.*e\)/\1x\2y/g' yinyong    首先找到/f l.*e/,然後分組,第一組f  第二組 l.*e  然後替換,第一組後追加x,第二組後追加y

love

like

lhhove

lovve

lovee

flove

fx livey

例3:grep與sed

grep -a 2 root /etc/passwd   顯示匹配到行和後兩行

sed  '2,+1p' /etc/passwd

grep -b 2 root /etc/passwd   顯示匹配到行和前兩行

sed  '2,-1p' /etc/passwd   不能用,不能檢視前一行,因為按行匹配,不回頭。

sed的基本用法

sed的工作流程 sed stream editor,流編輯器,預設對原檔案不做任何處理,僅對模式空間的資料進行處理,處理結束後,將模式空間列印至螢幕。sed逐行將檔案讀取到模式空間 記憶體 進行模式匹配,如果符合模式進行編輯 取決給的編輯命令 之後進行下一行的操作sed命令格式 sed optio...

sed基本用法

b 1.簡介 b color red 1 color 首先sed把當前正在處理的行儲存在乙個臨時快取區中 也稱為模式空間 color red 2 color 然後處理臨時緩衝區中的行,color red 3 color 完成後把該行傳送到螢幕上。sed每處理完一行就將其從臨時緩衝區刪除,然後將下一行...

sed基本學習

參考 跟老男孩學linux運維 核心系統命令實戰 sed stream editor seq 9 sed 2a liunx 講解 在第二行後面增加linux seq 9 sed 2i linux 講解 在第二行前面增加linux seq 9 sed 2d 講解 刪除第二行 seq 9 sed 2,4...