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