9.4/9.5 sedlinux
9.4 sed:正則表達式
sed支持grep的一些用法bash
但不會顯示顏色ssh
如下是介紹 p 的用法:post
~1. sed ‘/root/'p test.txt排序
寫法是這樣的字符串
並不會帶顏色it
並會把全部的都打印出來test
~2. sed -n '/root/'p test.txtsed
加上-n就會只打印帶root的行
~3. sed -n '/r.t/'p test.txt
一樣支持 .
~4. sed -n '/r*t/'p tset.txt
一樣支持*
~5. sed -nr ’/o+t/'p test.txt
-r不脫意的話,要加-r
一樣支持+(一次和屢次)
~6. sed -nr '/o{2}/'p test.txt
-r不加脫意符的話,要加-r
一樣支持{},o出現2次
~7. sed -nr '/root|bus/'p test.txt
-r不加脫意符的話,要加-r
一樣支持|,root和bus
~8. sed -n '2'p test.txt
'2'p只列出第二行
‘2,5’p列出2-5行
‘2,$'p列出25-末行。$表示末行
~9. sed -e '1'p -e '/bus/'p -n test.txt
運行多條命令
可屢次使用-e。結尾不要忘記加-n,不然會列出全部
~10. sed -n '/bus/'Ip test.txt
I(大寫I)相似於grep的-i。不區分大小寫
實例:
1.
[root@axinlinux-01 sed]# sed '/root/'p test.txt 會列出文件全部,root項會打印兩行。而且不會有顏色
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
b
241:rnjo:41234123
asdas:r3o:asda
dadain:x:1:1:bin:/bin:/sbin/NOLogin
daemon:x:2:2:daem
dfasd:r4134o:reqreqw
--
-
2.
[root@axinlinux-01 sed]# sed -n '/root/'p test.txt 只打印關鍵詞的搜索項
root:x:0:0:root:/root:/bin/bash
3.
[root@axinlinux-01 sed]# sed -n '/r.t/'p test.txt 支持 . 一個任意字符
operator:x:11:0:operator:/rooot:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
4.
[root@axinlinux-01 sed]# sed -n '/r*t/'p test.txt 支持 * 任意個字符
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
--
-
5.
[root@axinlinux-01 sed]# sed -nr '/o+t/'p test.txt 須要加-r。支持 + 一次或屢次個任意字符
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/rooot:/sbin/nologin
6.
[root@axinlinux-01 sed]# sed -nr '/o{2}/'p test.txt 須要加-r。支持{}的用法,前面字符的2次出現
root:x:0:0:root:/root:/bin/bash
oo1:wq
oo1
--
-
[root@axinlinux-01 sed]# sed -nr '/root|bus/'p test.txt 須要加-r。支持|的用法,root和bus
root:x:0:0:root:/root:/bin/bash
dbus:x:81:81:System message bus:/:/sbin/nologin
8.
[root@axinlinux-01 sed]# sed -n '2'p test.txt 只列出第二行
b
[root@axinlinux-01 sed]# sed -n '2,5'p test.txt 列出2-5行
b
241:rnjo:41234123
asdas:r3o:asda
dadain:x:1:1:bin:/bin:/sbin/NOLogin
[root@axinlinux-01 sed]# sed -n '28,$'p test.txt
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
9.
[root@axinlinux-01 sed]# sed -e '1'p -e '/bus/'p -n test.txt 記得末尾加-n
root:x:0:0:root:/root:/bin/bash
dbus:x:81:81:System message bus:/:/sbin/nologin
10.
[root@axinlinux-01 sed]# sed -n '/bus/'Ip test.txt 加I(大寫I),不區分大小寫
ffebus
grgrgregBus
dbus:x:81:81:System message bus:/:/sbin/nologin
----------------------------------------------------------------------------------------------------------------------------------------------------
9.5sed:
如下介紹 sed其餘的用法
~1. sed '1,25'd test.txt
將單引號後面的 p ,換成 d 便可刪除1-10行
僅僅只是在屏幕裏刪除1-25行,實際的文件並無刪除
~2. sed -i '1,25'd test.txt
-i 將文件實際刪除。 與不加-i的區別
’/user2/'d 也可刪除user2所在的行
~3. sed ‘1,10s/ro/wx/g' test.txt
替換。單引號最後一個字符 g 表明全局替換
1-10行將ro替換成wx
也能夠在正則表達式裏全局替換
sed -r '1,10s/ro+/wx/g' test.txt 可是要加 -r(非脫意符的狀況下)
1-10行,ro開頭的一個或多個字符,全局替換成wx
~4. sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' 意思爲:
像這種的字符串 root:x:0:0:root:/root:/bin/bash ,先後兩個相互交換一下
([^:]+)表示單獨指以非:開頭的一個或多個字符。()做爲區分,單獨指這一種字符。後面的:表明以:做爲間隔的
(.*) 表示貪婪匹配,一直匹配到最後。後面的:也是表明的以:做爲間隔的
([^:]+)表示最後一個字符,以非:開頭的一個或多個字符。()做爲區分,單獨指這一種字符
\3:\2:\1分別表明前三個以:間隔並以()做爲區分的字符。須要這樣寫來,表示命令後的一種排序方式。也就是說,3表明綠色的,1表明藍色的,讓他以123這種方式來排序。已達到先後兩個字符調換的結果
~5. sed 's/\/bin\/bash/wx/g' test.txt
當咱們須要替換的字符帶有/的時候,咱們要在該字符自己的/前面加脫意符\
~6. sed 's/[a-zA-Z]//g' test.txt
將數字所有刪除,直接替換爲空就能夠
~7. sed -r 's/(.*)/wx:&/' test.txt
將全部的行前面加上wx:
&表明全部在前面替換
實例:
1.
[root@axinlinux-01 sed]# sed '1,25'd test.txt p換d,刪除1-25行。實際的文件並無刪除
ystemd-network:x:192:192:systemd Network Mooo1anagement:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
2.
[root@axinlinux-01 sed]# sed -i '1,25'd test.txt 加-i選項,將實際的文件刪除設定的行段
[root@axinlinux-01 sed]# wc -l !$ wc -l 能夠看一下
wc -l test.txt
7 test.txt
3.
[root@axinlinux-01 sed]# sed '1,10s/ro/wx/g' test.txt |head 前十行ro替換成了wx
wxot:x:0:0:wxot:/wxot:/bin/bash
b
241:rnjo:41234123
asdas:r3o:asda
dadain:x:1:1:bin:/bin:/sbin/NOLogin
daemon:x:2:2:daem
dfasd:r4134o:reqreqw
o1
ffebus
grgrgregBus
[root@axinlinux-01 sed]# sed -r '1,10s/d+/wx/g' test.txt |head 前十行d開頭的一個或多個字符,替換成了wx,加-r
root:x:0:0:root:/root:/bin/bash
b
241:rnjo:41234123
aswxas:r3o:aswxa
wxawxain:x:1:1:bin:/bin:/sbin/NOLogin
wxaemon:x:2:2:wxaem
wxfaswx:r4134o:reqreqw
o1
ffebus
grgrgregBus
4.
[root@axinlinux-01 sed]# head test.txt 咱們先head一下
root:x:0:0:root:/root:/bin/bash
241:rnjo:41234123
asdas:r3o:asda
dadain:x:1:1:bin:/bin:/sbin/NOLogin
daemon:x:2:2:daem
dfasd:r4134o:reqreqw
sdasdas:rgo:
on:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@axinlinux-01 sed]# head test.txt | sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' 上下對比一下,發現已成功調換
/bin/bash:x:0:0:root:/root:root
41234123:rnjo:241
asda:r3o:asdas
/sbin/NOLogin:x:1:1:bin:/bin:dadain
daem:x:2:2:daemon
reqreqw:r4134o:dfasd
sdasdas:rgo:
/sbin/nologin:/sbin:on
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
5.
[root@axinlinux-01 sed]# head test.txt | sed 's/\/bin\/bash/wx/g' 脫意符要加在須要脫意字符的前面,別忘了加g
root:x:0:0:root:/root:wx
241:rnjo:41234123
asdas:r3o:asda
dadain:x:1:1:bin:/bin:/sbin/NOLogin
daemon:x:2:2:daem
dfasd:r4134o:reqreqw
sdasdas:rgo:
on:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6.
[root@axinlinux-01 sed]# head test.txt |sed 's/[a-zA-Z]//g'
::0:0::/://
241::41234123
:3:
::1:1::/://
::2:2:
:4134:
::
:/://
::3:4:://://
::4:7::///://
7.
[root@axinlinux-01 sed]# head test.txt |sed -r 's/(.*)/wx:&/' &表明全部前面替換
wx:root:x:0:0:root:/root:/bin/bash
wx:241:rnjo:41234123
wx:asdas:r3o:asda
wx:dadain:x:1:1:bin:/bin:/sbin/NOLogin
wx:daemon:x:2:2:daem
wx:dfasd:r4134o:reqreqw
wx:sdasdas:rgo:
wx:on:/sbin:/sbin/nologin
wx:adm:x:3:4:adm:/var/adm:/sbin/nologin
wx:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin