(4)向文件中插入數(shù)據(jù)
需求:在student.txt
文本中第三行前面添加88888888888
執(zhí)行命令如下:
[root@localhost tmp]# sed "3i 88888888888888" student.txt
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
88888888888888
2 Sunwk 99 98 97 96.66
66666666666666
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.33
同理,需要把修改寫入文件何暇,需要添加-i
選項(xiàng)。
(5)修改文件中的多行數(shù)據(jù)(刪除,追加二跋,插入)
如果是想追加或插入多行數(shù)據(jù),除最后一行外流昏,每行的末尾都要加入\
代表數(shù)據(jù)未完結(jié)扎即。
需求:向student.txt
文本中第二行后面追加hello world
。
執(zhí)行如下命令:
[root@localhost tmp]# sed '2a hello \
> world' student.txt
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
hello
world
2 Sunwk 99 98 97 96.66
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.33
(引號(hào)不完全是不會(huì)執(zhí)行的)
提示:我發(fā)現(xiàn)換行后tab
鍵提示功能不能用了况凉。(不清楚怎么回事)
這里在說明一下-n
選項(xiàng)谚鄙,-n
選項(xiàng)只會(huì)把經(jīng)過sed
命令處理的行輸出到屏幕。
執(zhí)行如下命令:
[root@localhost tmp]# sed -n '2a hello \
world' student.txt
hello
world
(6)替換文件中的整行文本
需求:替換student.txt
文本中的第二行數(shù)據(jù)為999999999999999
執(zhí)行如下命令:
[root@localhost tmp]# sed '2c 999999999999999' student.txt
ID Name Python Linux MySQL Java
999999999999999
2 Sunwk 99 98 97 96.66
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.33
注意:
sed
命令默認(rèn)情況是不會(huì)修改文件內(nèi)容的刁绒,如果確定需要讓sed
命令直接處理文件的內(nèi)容襟锐,可以使用-i
選項(xiàng)。不過要小心啊膛锭,這樣非常容易誤操作粮坞,在操作系統(tǒng)文件時(shí)請(qǐng)小心謹(jǐn)慎。
(7)字符串替換
在sed
中c
動(dòng)作是進(jìn)行整行替換的初狰,如果僅僅想替換行中的部分?jǐn)?shù)據(jù)莫杈,就要使用s
動(dòng)作了。
需求:修改Zhubj的Java成績?yōu)?00
執(zhí)行如下命令:
# 命令格式
[root@localhost tmp]# sed 's/舊字串/新字串/g' 文件名
# 執(zhí)行命令
[root@localhost tmp]# sed 's/74.44/100/g' student.txt
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
3 Zhubj 77 76 75 100
4 Shahs 66 65 64 63.33
# 或者對(duì)行范圍更精準(zhǔn)一些
[root@localhost tmp]# sed '4s/74.44/100/g' student.txt
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
3 Zhubj 77 76 75 100
4 Shahs 66 65 64 63.33
注意:
4s/74.44/100/g
表達(dá)式中s
和/
之間不能有空格奢入。如果
4s/74.44/100/g
不寫行號(hào)筝闹,也就是上面第一種寫法媳叨,就代表替換整個(gè)文檔中的匹配字符串。
(8)同時(shí)執(zhí)行多條動(dòng)作
在sed
命令中关顷,-e
選項(xiàng)可以同時(shí)執(zhí)行多個(gè)sed
動(dòng)作糊秆,當(dāng)然如果只是執(zhí)行一個(gè)動(dòng)作也可以使用-e
選項(xiàng),但是這時(shí)-e
選項(xiàng)是沒有什么意義的议双。
還要注意多個(gè)動(dòng)作之間要用;
號(hào)或回車分割痘番。
練習(xí)1:
需求:把Shahs的成績注釋掉,并且把Zhubj的Python成績改成100平痰。
執(zhí)行命令如下:
# 使用;分號(hào)的方式隔離多條動(dòng)作
[root@localhost tmp]# sed -e '5s/^/#/g ; 4s/77/100/g' student.txt
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
3 Zhubj 100 76 75 74.44
#4 Shahs 66 65 64 63.33
注意:
^
代表行首汞舱,是正則表達(dá)式,不用加-r
選項(xiàng)也可以宗雇。其實(shí)上面命令中不寫
-e
選項(xiàng)昂芜,命令也是可以執(zhí)行的,應(yīng)該是默認(rèn)識(shí)別的赔蒲。但是我們盡量規(guī)范書寫泌神。
# 使用回車的方式隔離多條動(dòng)作
[root@localhost tmp]# sed -e '5s/^/#/g
> 4s/77/100/g' student.txt
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
3 Zhubj 100 76 75 74.44
#4 Shahs 66 65 64 63.33
注意:使用回車的方式進(jìn)行動(dòng)作之間的分隔,就不能在寫分號(hào)
;
了舞虱。
特別注意:
在
sed
命令中有多條動(dòng)作執(zhí)行的時(shí)候腻扇,且有多個(gè)選項(xiàng)的時(shí)候,-e
選項(xiàng)要緊挨動(dòng)作表達(dá)式砾嫉,否則會(huì)報(bào)錯(cuò)幼苛。例如:
-i -e '5s/^/#/g'
正確,
-e -i '5s/^/#/g'
報(bào)錯(cuò)焕刮。
練習(xí)2:
刪除字符串使用sed
命令的d
操作是不能實(shí)現(xiàn)的舶沿,因?yàn)?code>d操作是刪除整行。這時(shí)就需要字符串替換配并,也就是sed
命令的s
動(dòng)作來完成括荡。
需求:刪除Zhubj的Python成績。
執(zhí)行如下命令:
# 用空代替
[root@localhost tmp]# sed '4s/77//g' student.txt
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
3 Zhubj 76 75 74.44
4 Shahs 66 65 64 63.33
3溉旋、總結(jié)
什么時(shí)候需要使用sed
命令畸冲?
如果需要在腳本程序中,修改文件中的數(shù)據(jù)观腊,這種情況下我們就需要使用sed
命令邑闲。