用法
sed [option] ‘Address Command‘ yourfile
e.g. sed -n ‘2,13p‘ lineuser #打印文件lineuser中第2~13行的内容,-n为option, 2,13为Address,p为Command
Address与Command中间的空格也可以省略
sed处理过程
待处理的文件一行一行地被sed读入到模式空间(pattern space)中,根据匹配及相应的处理命令进行输出显示,默认下每个模式空间的内容都会输出
sed常用option
-n:不显示模式空间的行,只显示被匹配处理的行
-i : 将处理后的结尾直接覆盖原文件
-e script:可以指定多个-e参数,每个处理命令都依照最原先的文件内容进行处理,而不是一个处理完再传递给下一个处理
-f script-file :将命令参数写到一个文件中进行调用
-r:表示使用扩展正则表达式
练习文件
[[email protected] tmp]# cat lineuser
1:root
2:bin
3:daemon
4:adm
5:gootee
6:sync
7:shutdown
8:halt
9:mail
10:uucp
11:operator
12:hadoop
13:gopher
14:admin
15:nobody
Address匹配方式
1.addr1 匹配指定特定行
#显示第三行内容
[[email protected] tmp]# sed -n ‘3p‘ lineuser
3:daemon
2.addr1,addr2 匹配从addr1到addr2的行
#打印第四到六行
[[email protected] tmp]# sed -n ‘4,6p‘ lineuser
4:adm
5:gootee
6:sync
3./regexp/ 匹配含有regexp的行
打印所有包含oo字符的行
[[email protected] tmp]# sed -n ‘/oo/p‘ lineuser
1:root
5:gootee
12:hadoop
4./regexp1/, /regexp2/ 匹配从含有regexp1,到regexp2的行
#打印从包含有mon的行到包含有adm的行
[[email protected] tmp]# sed -n ‘/mon/,/adm/p‘ lineuser
3:daemon
4:adm
5.first~step 匹配以first行为开始,以step为间隔的行
#打印1,3,5....的行,即奇数行
[[email protected] tmp]# sed -n ‘1~2p‘ lineuser
1:root
3:daemon
5:gootee
7:shutdown
9:mail
11:operator
13:gopher
15:nobody
#打印2,4,6....的行,即偶数行
[[email protected] tmp]# sed -n ‘2~2p‘ lineuser
2:bin
4:adm
6:sync
8:halt
10:uucp
12:hadoop
14:admin
6.addr1,+N 匹配addr1行及之后的N行
[[email protected] tmp]# sed -n ‘3,+4p‘ lineuser
3:daemon
4:adm
5:gootee
6:sync
7:shutdown
7./regexp/,+N 匹配含有regexp的行,及其后面N行
[[email protected] tmp]# sed -n ‘/adm/,+1p‘ lineuser
4:adm
5:gootee
14:admin
15:nobody
Command命令
1. a \text 在匹配的行后添加行
#在5到8行后每行添加一行
[[email protected] tmp]# sed ‘5,8a \nice to meet you‘ lineuser
1:root
2:bin
3:daemon
4:adm
5:gootee
nice to meet you
6:sync
nice to meet you
7:shutdown
nice to meet you
8:halt
nice to meet you
9:mail
10:uucp
11:operator
12:hadoop
13:gopher
14:admin
15:nobody
2. i \text 在匹配的行前添加行
#在5到8行前每行添加一行
[[email protected] tmp]# sed ‘5,8i \nice to meet you‘ lineuser
1:root
2:bin
3:daemon
4:adm
nice to meet you
5:gootee
nice to meet you
6:sync
nice to meet you
7:shutdown
nice to meet you
8:halt
9:mail
10:uucp
11:operator
12:hadoop
13:gopher
14:admin
15:nobody
3. d 删除匹配的行
#删除5到13行
[[email protected] tmp]# sed ‘5,13d‘ lineuser
1:root
2:bin
3:daemon
4:adm
14:admin
15:nobody
4. c \text替换匹配的行
#5到13行的所有内容替换成一行
[[email protected] tmp]# sed ‘5,13c \nice to meet you‘ lineuser
1:root
2:bin
3:daemon
4:adm
nice to meet you
14:admin
15:nobody
5. p 打印匹配的行 示例在上面已经出现,不再列举
6. r file 在匹配的行后插入file的内容
#在第3~5行每行后添加文件的内容
[[email protected] tmp]# cat name
Beijing
Shenzhen
[[email protected] tmp]# sed ‘3,5r name‘ lineuser
1:root
2:bin
3:daemon
Beijing
Shenzhen
4:adm
Beijing
Shenzhen
5:gootee
Beijing
Shenzhen
6:sync
7:shutdown
8:halt
9:mail
10:uucp
11:operator
12:hadoop
13:gopher
14:admin
15:nobody
7 s/regexp/replacement/ 将regexp替换成replacement,默认只处理每一行第一个出现的字符串,如果要处理所有的字符串,需要在最后加上g,如果需要忽略大小写,需要在最后加上i
#将第3到15行里面出现oo的地方都替换成NICE TO MEET YOU
[[email protected] tmp]# sed ‘3,15s/oo/NICE TO MEET YOU/‘ lineuser
1:root
2:bin
3:daemon
4:adm
5:gNICE TO MEET YOUtee
6:sync
7:shutdown
8:halt
9:mail
10:uucp
11:operator
12:hadNICE TO MEET YOUp
13:gopher
14:admin
15:nobody