【CentOS 7笔记37】,sed命令#

shallow丿ove


[root@localhost ~]# mkdir sed
[root@localhost ~]# cd sed/
[root@localhost sed]# cp ../grep/inittab test.txt

sed虽然比grep麻烦一点,但sed有一个强大的功能就是查找替换

'/str/'p

[root@localhost sed]# sed '/root/'p test.txt 
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/NOLogin
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
php-fpm:x:1001:1001::/home/php-fpm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

这里匹配到root,并且打印了两次同时其他无关的信息也打印了出来,-n可以不现实其他无关的

-n '/str/'p

[root@localhost sed]# sed -n '/root/'p test.txt 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

-r脱义

[root@localhost sed]# sed -n '/ro\+t/'p test.txt 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost sed]# sed -n '/ro+t/'p test.txt 
[root@localhost sed]# sed -nr '/ro+t/'p test.txt 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

类似于grep -E

同样支持正则

[root@localhost sed]# sed -n '/r.t/'p test.txt 
# multi-user.target: analogous to runlevel 3
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

[root@localhost sed]# sed -nr '/o{2}/'p test.txt 
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/NOLogin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

[root@localhost sed]# sed -nr '/root|bus/'p test.txt 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

打印指定的行'num'

[root@localhost sed]# sed -n '10'p test.txt 
# graphical.target: analogous to runlevel 5

打印范围行'num,num'

[root@localhost sed]# sed -n '2,10'p test.txt 
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5

打印某行到末行的内容'num,$'

[root@localhost sed]# sed -n '30,$'p test.txt 
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
php-fpm:x:1001:1001::/home/php-fpm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

同时打印-e

[root@localhost sed]# sed -e '1'p -e '/bus/'p -n test.txt 
# inittab is no longer used when using systemd.
dbus:x:81:81:System message bus:/:/sbin/nologin

不区分大小写'/user/'Ip

[root@localhost sed]# sed -n '/user/'p test.txt 
# multi-user.target: analogous to runlevel 3
[root@localhost sed]# sed -n '/user/'Ip test.txt 
# multi-user.target: analogous to runlevel 3
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin

过滤删除行'num,num'd

[root@localhost sed]# sed '1,35'd test.txt 
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
php-fpm:x:1001:1001::/home/php-fpm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root@localhost sed]# wc -l test.txt 
40 test.txt

并没有直接删除

-i删除

[root@localhost sed]# cp test.txt test.txt.bak
[root@localhost sed]# sed -i '1,35'd test.txt 
[root@localhost sed]# wc -l test.txt 
5 test.txt
[root@localhost sed]# sed -i '/ssh/'d test.txt 
[root@localhost sed]# cat test.txt
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
php-fpm:x:1001:1001::/home/php-fpm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

查找替换

[root@localhost sed]# cp test.txt.bak test.txt
cp: overwrite ‘test.txt’? y
[root@localhost sed]# sed '1,10s/#/@/g' test.txt
@ inittab is no longer used when using systemd.
@
@ ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
@
@ Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
@
@ systemd uses 'targets' instead of runlevels. By default, there are two main targets:
@
@ multi-user.target: analogous to runlevel 3
@ graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/NOLogin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
php-fpm:x:1001:1001::/home/php-fpm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

使用方法与vi命令中的查找方式类似

使用贪婪匹配替换

[root@localhost sed]# tail test.txt | sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'
/sbin/nologin:x:81:81:System message bus:/:dbus
/sbin/nologin:x:999:998:User for polkitd:/:polkitd
/sbin/nologin:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:avahi
/sbin/nologin:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:avahi-autoipd
/sbin/nologin:x:89:89::/var/spool/postfix:postfix
/sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd
/bin/bash:x:1000:1000::/home/mysql:mysql
/sbin/nologin:x:192:192:systemd Network Management:/:systemd-network
/sbin/nologin:x:1001:1001::/home/php-fpm:php-fpm
/sbin/nologin:x:48:48:Apache:/usr/share/httpd:apache

使用\、@、#区分

[root@localhost sed]# tail test.txt | sed -r 's/\/sbin\/nologin/123/g'
dbus:x:81:81:System message bus:/:123
polkitd:x:999:998:User for polkitd:/:123
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:123
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:123
postfix:x:89:89::/var/spool/postfix:123
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:123
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:123
php-fpm:x:1001:1001::/home/php-fpm:123
apache:x:48:48:Apache:/usr/share/httpd:123

删除英文字母

[root@localhost sed]# tail test.txt | sed -r 's/[a-zA-Z]//g'
::81:81:  :/://
::999:998:  :/://
::70:70: /- :///-://
-::170:170: 4 :///-://
::89:89::///://
::74:74:- :///://
::1000:1000:://://
-::192:192:  :/://
-::1001:1001:://-://
::48:48::///://

替换成空

替换前面字符

[root@localhost sed]# tail test.txt | sed -r 's/(.*)/aaa:&/'
aaa:dbus:x:81:81:System message bus:/:/sbin/nologin
aaa:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
aaa:avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
aaa:avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
aaa:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
aaa:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
aaa:mysql:x:1000:1000::/home/mysql:/bin/bash
aaa:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
aaa:php-fpm:x:1001:1001::/home/php-fpm:/sbin/nologin
aaa:apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

(.*)表示一整行


转载于:https://my.oschina.net/u/3892756/blog/3056531

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值