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...