linux的sed(增刪改查)使用方法


sed的增刪改查的基本操作

參考:https://www.cnblogs.com/0zcl/p/6855740.html

01:增(a)

2個sed命令,分別是:(這些操作都是在內存中進行的,所以不會 被寫入到原文件中,如果需要修改原文件則需要用大 -i )

  eg:修改原文件的內容。為了防止修改配置文件,一定要實現輩分或則用測試文件測試

sed  -i  '2a ppppppp' test.txt  #在第二行之后添加數據,並寫入到原文件

 

  • “a”:追加文本到指定行后,記憶方法:a的全拼是append,意思是追加。
  • “i“:插入文本到指定行前,記憶方法:i的全拼是insert,意思是插入。
[root@tom /]# cat test.txt
xxxxxxxxxxxx
mmmmmmmmmmmm
hhhhhhhhh

[root@tom /]# sed '2a ppppppp' test.txt   #2a  代表在第二行之后進行 添加 操作
xxxxxxxxxxxx
mmmmmmmmmmmm      #新增的內容
ppppppp
hhhhhhhhh

[root@tom /]# sed '2i 9999' test.txt    #2i 代表在第二行之前進行 插入 操作
xxxxxxxxxxxx
9999        #新插入的內容
mmmmmmmmmmmm
hhhhhhhhh

總結:插入i 在之前, a添加在之后

ps:單引號和雙引號的用法

#單引號--變量$PATH會將文本內容原封不動插入,不會解釋成路徑

#雙引號--變量$PATH被解析以后在當作文本進行插入

總結:
  • 如果引號里面是普通字符串的話,你可以任意使用單引號或者雙引號:
  • 如果引號里面是變量或者帶反引號的命令的話,你想要變量解析的結果或者命令執行的結果,那就使用雙引號;你想要引號內的原樣字符串,那就使用單引號。
 

02:添加多行文本到一個文件中並寫入到原文件中

[root@tom /]# cat test.txt
xxxxxxxxxxxx
mmmmmmmmmmmm
kkkkkkkkkkkk


[root@tom /]# sed -i "3a qq\nwww\neee\nrrr\nttt\nyyy\nuuu" test.txt # -i 代表寫入原文件, \n 代表換行,一定不能忘記寫 \n 不然不會起作用
[root@tom /]# cat test.txt
xxxxxxxxxxxx
mmmmmmmmmmmm
kkkkkkkkkkkk
qq
www
eee
rrr
ttt
yyy
uuu



 03:刪除

 1.刪除單行文本(刪除第三行文本)

[root@tom /]# sed "3d" test.txt    #3d  數字代表第幾行,d代表刪除
xxxxxxxxxxxx
mmmmmmmmmmmm
qq
www
eee
rrr
ttt
yyy
uuu

 2.刪除第2行到第三行的數據

[root@tom /]# cat test.txt    
xxxxxxxxxxxx
mmmmmmmmmmmm
kkkkkkkkkkkk
qq
www
eee
rrr
ttt
yyy
uuu



[root@tom /]# sed "2,3d" test.txt     #刪除第二行到第三行的數據(包含這首位這兩個)
xxxxxxxxxxxx
qq
www
eee
rrr
ttt
yyy
uuu

3.正則匹配刪除

  在sed軟件中,使用正則的格式和awk一樣,使用2個”/“包含指定的正則表達式,即“/正則表達式/”。

  "/k/d"有哪一行有k則刪除這一行。 

[root@tom /]# cat test.txt
xxxxxxxxxxxx
mmmmmmmmmmmm
kkkkkkkkkkkk
qq
www
eee
rrr
ttt
yyy
uuu


[root@tom /]# sed "/k/d" test.txt  #刪除包含k的這一行內容
xxxxxxxxxxxx
mmmmmmmmmmmm
qq
www
eee
rrr
ttt
yyy
uuu

正則表達式形式的多行刪除,也是以逗號分隔2個地址,最后結果是刪除包含“k”的行到包含“x”的行

[root@tom /]# cat test.txt
xxxxxxxxxxxx
mmmmmmmmmmmm
kkkkkkkkkkkk
qq
www
eee
rrr
ttt
yyy
uuu

[root@tom /]# sed "/m/,/y/d" test.txt   #刪除包含m到包含y的行
xxxxxxxxxxxx
uuu

正則表達式我們知道“$”代表行尾,在sed中“$”代表文件的最后一行。

例子:

[root@tom /]# sed "/3,$/d" test.txt
xxxxxxxxxxxx
mmmmmmmmmmmm
kkkkkkkkkkkk
qq
www
eee
rrr
ttt
yyy
uuu


[root@tom /]# sed "3,\$d" test.txt
xxxxxxxxxxxx
mmmmmmmmmmmm
[root@tom /]# 

4:sed文本內容替換

  • “s”:單獨使用-->將每一行中第一處匹配的字符串進行替換==>sed命令
  • “g”:每一行進行全部替換-->sed命令s的替換標志之一(全局替換),非sed命令。
  • “-i”:修改文件內容-->sed軟件的選項,注意和sed命令i區別。

sed軟件替換模型  ===>  sed -i 's#目標內容#替換內容#g'

  • 定界符/或#,第一個和第二個之間的就是被替換的內容,第二個和第三個之間的就是替換后的內容。建議使用#作為定界符。
  • s#目標內容#替換內容#g ,“目標內容”能用正則表達式,但替換內容不能用,必須是具體的。因為替換內容使用正則的話會讓sed軟件無所適從,它不知道你要替換什么內容。
  • 默認sed軟件是對模式空間(內存中的數據)操作,而-i選項會更改磁盤上的文件內容。
[root@tom /]# cat test.txt
xxxxxxxxxxxx
mmmmmmmmmmmm
kkkkkkkkkkkk
qq
www
eee
rrr
ttt
yyy
uuu

[root@tom /]# sed "s#m#b#g" test.txt   #將文本中的m全部替換成b,   s代表替換的意思,g代表全部
xxxxxxxxxxxx
bbbbbbbbbbbb
kkkkkkkkkkkk
qq
www
eee
rrr
ttt
yyy
uuu

 


免責聲明!

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



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