sed每次只替換一行中的第一個命中


例如,abcd.txt中內容如下:

[root@i-B56C455B DMS]# more abcd.txt 
aba1
abcd
acad
[root@i-B56C455B DMS]# 

現在實現全部替換a為e:使用【/g】

[root@i-B56C455B DMS]# sed -i 's/a/e/g' abcd.txt 
[root@i-B56C455B DMS]# more abcd.txt 
ebe1
ebcd
eced
[root@i-B56C455B DMS]# 

現在只替換每行第一次出現的e為a:去掉【/g】

[root@i-B56C455B DMS]# sed -i 's/e/a/' abcd.txt 
[root@i-B56C455B DMS]# more abcd.txt 
abe1
abcd
aced
[root@i-B56C455B DMS]# 

再次執行吧e替換為a:

[root@i-B56C455B DMS]# sed -i 's/e/a/' abcd.txt 
[root@i-B56C455B DMS]# more abcd.txt 
aba1
abcd
acad
[root@i-B56C455B DMS]# 

現在實現每次只替換一個a:使用【0,/待替換內容/s/待替換內容/替換內容/】,如下只替換了第一行的第一個a為e

[root@i-B56C455B DMS]# sed -i '0,/a/s/a/e/' abcd.txt 
[root@i-B56C455B DMS]# more abcd.txt 
eba1
abcd
acad
[root@i-B56C455B DMS]# 

現在回原始內容:

[root@i-B56C455B DMS]# more abcd.txt 
aba1
abcd
acad
[root@i-B56C455B DMS]# 

實現替換第一行的所有a為e,結合上面的只需要加/g參數即可:

[root@i-B56C455B DMS]# sed -i '0,/a/s/a/e/g' abcd.txt 
[root@i-B56C455B DMS]# more abcd.txt 
ebe1
abcd
acad
[root@i-B56C455B DMS]# 

好了,如果每次想替換兩行怎么辦?那就把0,/改為1,/

[root@i-B56C455B DMS]# more abcd.txt 
aba1
abad
acad
[root@i-B56C455B DMS]# 

替換兩行試下:

[root@i-B56C455B DMS]# sed -i '1,/a/s/a/e/g' abcd.txt 
[root@i-B56C455B DMS]# more abcd.txt 
ebe1
ebed
acad
[root@i-B56C455B DMS]# 

恢復原始內容,每次替換兩行,只替換第一個a為e:

[root@i-B56C455B DMS]# more abcd.txt 
aba1
abad
acad
[root@i-B56C455B DMS]# sed -i '1,/a/s/a/e/' abcd.txt 
[root@i-B56C455B DMS]# more abcd.txt 
eba1
ebad
acad
[root@i-B56C455B DMS]# 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM