sed的基本用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed的基本用法相关的知识,希望对你有一定的参考价值。

sed 可以替换指定的的字符
用法和grep差不多,

不加-n是匹配所有的行
-n 匹配root的行
[[email protected] sed]# sed -n ‘/root/‘p passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

同用也是支持.的
[[email protected] sed]# sed -n ‘/r.t/‘p passwd
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

-r 是脱意,
[[email protected] sed]# sed -nr ‘/o+t/‘p passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[[email protected] sed]# sed -n ‘/r*t/‘p passwd

匹配两次o
[[email protected] sed]# sed -nr ‘/o{2}/‘p passwd
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

打印2-5行
[[email protected] sed]# sed -n ‘2,5‘p passwd
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

打印20到最后的行
[[email protected] sed]# sed -n ‘20,$‘p passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
sam:x:1000:1000::/home/sam:/bin/bash
kylin:x:1001:1001::/home/kylin:/bin/bash
miko:x:1002:1003::/home/miko:/bin/bash
candy:x:1003:1004::/home/candy:/bin/bash

全部打印出来
[[email protected] sed]# sed -n ‘1,$‘p passwd

-e 多条件匹配
[[email protected] sed]# sed -e ‘1‘p -e ‘/kylin/‘p -n passwd
root:x:0:0:root:/root:/bin/bash
kylin:x:1001:1001::/home/kylin:/bin/bash

-I 不区分大小写,I需要放在p的前面
[[email protected] sed]# sed -n ‘/kylin/‘Ip passwd
Kylin
kylin:x:1001:1001::/home/kylin:/bin/bash

删除1-20行,这样是不写入文件的,
[[email protected] sed]# sed ‘1,20‘d passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
sam:x:1000:1000::/home/sam:/bin/bash
kylin:x:1001:1001::/home/kylin:/bin/bash
miko:x:1002:1003::/home/miko:/bin/bash
candy:x:1003:1004::/home/candy:/bin/bash

-i 删除文件的时候是写入文件的
[[email protected] sed]# sed -i ‘1,20‘d passwd
[[email protected] sed]# cat passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
sam:x:1000:1000::/home/sam:/bin/bash
kylin:x:1001:1001::/home/kylin:/bin/bash
miko:x:1002:1003::/home/miko:/bin/bash
candy:x:1003:1004::/home/candy:/bin/bash

删除带candy的行
[[email protected] sed]# sed -i ‘/candy/‘d passwd
[[email protected] sed]# cat passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
kylin:x:1001:1001::/home/kylin:/bin/bash
miko:x:1002:1003::/home/miko:/bin/bash

替换 和vim里面的替换差不多
[[email protected] sed]# sed ‘1,10s/root/toor/g‘ passwd |head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Kylin
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

也是支持特殊符号的,需要加-r
[[email protected] sed]# sed -r ‘1,10s/ro+/r/g‘ passwd |head
rt:x:0:0:rt:/rt:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Kylin
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

把第一段和最后一段换一下位置,
([^:]+) 第一段是一个或多个非冒号
(.*) 贪婪匹配一直匹配到最后一个冒号
([^:]+) 非冒号的字符
\3:\2:\1 这个原来的位置应该是123,但是需要把第一部分和第三部分换位置就需要把3写在前面,把1写在后面

每一个小括号括起来的都是一段,一个整体
[[email protected] sed]# head passwd |sed -r ‘s/([^:]+):(.*):([^:]+)/\3:\2:\1/‘
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
Kylin
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail

如果需要替换的里面带有这种/符号的,可以用\来脱意一下,也可以换一种符号,用#、$这些都可以的,只要可以区分就可以了
[[email protected] sed]# sed ‘s#/root#sam#g‘ passwd |head
[[email protected] sed]# sed ‘s/\/root/sam/g‘ passwd |head
root:x:0:0:root:sam:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Kylin
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

可以替换所有的英文
[[email protected] sed]# sed ‘s/[a-zA-Z]//g‘ passwd |head
::0:0::/://
::1:1::/://
::2:2::/://

::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://
::7:0::/://
::8:12::///://

每行的前面加上#
[[email protected] sed]# sed ‘s/^/#/g‘ passwd |head
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#Kylin
#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
上面的也可以用.,.代表匹配所有需要加上-r脱意
[[email protected] sed]# sed -r ‘s/.*/sam:&/g‘ passwd |head
sam:root:x:0:0:root:/root:/bin/bash
sam:bin:x:1:1:bin:/bin:/sbin/nologin
sam:daemon:x:2:2:daemon:/sbin:/sbin/nologin
sam:Kylin
sam:adm:x:3:4:adm:/var/adm:/sbin/nologin
sam:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sam:sync:x:5:0:sync:/sbin:/bin/sync
sam:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sam:halt:x:7:0:halt:/sbin:/sbin/halt
sam:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

在Kylin行前面加上一个sam:
[[email protected] sed]# sed ‘s/^Kylin/sam:&/g‘ passwd |head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sam:Kylin
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

以上是关于sed的基本用法的主要内容,如果未能解决你的问题,请参考以下文章

sed基本用法:修改行

sed的基本用法和高级用法

sed的基本用法

sed的基本用法

linux中行编辑器sed的基本用法

sed基本用法