三剑客 之sed
功能说明:
sed stream editor 增删改查 过滤 取行
语法格式:
sed [option] [sed -commads] [iput-file]
sed 选项 sed命令 输出文件
input-file 可以是文本 也可以是标准输入 例如cat test.txt
[option]
-n 取消默认输出)
-i 修改文件 sed -i.ori 's#NB#benjamin#g' person.txt 给原文件备份生成 person.txt.ori
-f 后接sed脚本文件名
-r 使用扩展正则表达式
-e 执行多条sed命令
[sed-commands]
a 追加
i 插入
d 删除
c 替换指定的行
s 替换指定字符串 g 命令的替换标志-全局替换标志
p 输出指定内容,与-n参数一起使用 -n取消默认输出
l 输出不可见字符
w 另存文件
[指定执行的地址范围]
n1[,n2] {sed-commands}
10{sed-commands}
10,20{sed-commands}
10,+20{sed-commands} #10-30行执行sed命令
1~2{sed-commands} #从1行开始 2为步长 匹配执行sed命令
[root@linux-node1 ~]# seq 10| sed -n '1~2p'
1
3
5
7
9
10,${sed-commands} #10到最后一行 执行sed命令
/benjamin/ {sed-commands}
/benjamin/,/Alex/{sed-commands}
/benjamin/.$
10,/Alex/{sed-commands}
/Alex/,10{sed-commands}
/benjamin/,+20{sed-commands}
创建一个person.txt文本
cat person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
1. 增删改查
1.1、增 a i
单行增加:
#在第二行后面追加106,dandan,CSO
[root@linux-node1 ~]# sed '2a 106,dandan,CSO' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
106,dandan,CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#在第二行前面追加106,dandan,CSO
[root@linux-node1 ~]# sed '2i 106,dandan,CSO' person.txt
101,benjamin,CEO
106,dandan,CSO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
多行增加
#第二行后面增加两行
[root@linux-node1 ~]# sed '2a 106,dandan,CSO 107,binbin.CSO' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
106,dandan,CSO
107,binbin.CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#或者使用下面的方法是一样的
[root@linux-node1 ~]# sed '2a 106,dandan,CSO
> 107,binbin.CSO' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
106,dandan,CSO
107,binbin.CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
企业案例1:ssh优化 修改默认端口号
[root@linux-node1 ~]# sed -ir '13i Port 52113 PermitRootLogin no PermitEmptyPasswords no UseDNS no GSSAPIAuthentication no' /etc/ssh/sshd_config
1.2、删 d
#全删
[root@linux-node1 ~]# sed 'd' person.txt
#删除第2行
[root@linux-node1 ~]# sed '2d' person.txt
101,benjamin,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#删除2-5行
[root@linux-node1 ~]# sed '2,5d' person.txt
101,benjamin,CEO
#删除2-最后一行
[root@linux-node1 ~]# sed '2,$d' person.txt
101,benjamin,CEO
#删除基数行
[root@linux-node1 ~]sed '1~2d' person.txt
102,xiaozhang,CTO
104,yy,CFO
#删除匹配到benjamin的行
[root@linux-node1 ~]# sed '/benjamin/d' person.txt
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
企业案例2:打印文件内容但不包括benjamin
sed ‘/oldboy/d’ person.txt
grep -v benjamin persong.txt
1.3、改 c s
1.3.1 按行替换
# 替换第二行(不常用,一般替换部分文本不会整行替换,了解即可)
[root@linux-node1 ~]# sed '2c 106,diandian,sco' person.txt
101,benjamin,CEO
106,diandian,sco
103,Alex,COO
104,yy,CFO
105,feixue,CIO
1.3.2 指定字符串替换
# 匹配benjamin字符串替换为 NB (不加i保存在内存里也可称为模式空间)
[root@linux-node1 ~]# sed s#benjamin#NB#g person.txt
101,NB,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#去配置文件的注释
[root@linux-node1 ~] grep -v '^#' /etc/inittab|grep -v $' '
id:3:initdefault:
企业案例3:永久关闭selinux
[root@linux-node1 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
1.3.3、变量替换
cat zimu.txt
a
b
a
[root@linux-node1 ~]# x=a
[root@linux-node1 ~]# y=b
[root@linux-node1 ~]# echo $x,$y
a,b
[root@linux-node1 ~]# sed "s#$x#$y#g" zimu.txt #注意这里是双引号 变量的引用
b
b
b
#不用双引号也可以替换:
[root@linux-node1 ~]# sed 's#'$x'#'$y'#' zimu.txt
b
b
b
[root@linux-node1 ~]# eval sed 's#$x#$y#g' zimu.txt
b
b
b
1.3.4、分组替换 () 1
说明:^.*am空格 匹配以任意字符接am开头的字符对应的是 I am空格
([a-z].*) 匹配任意小写字母 对应oldboy
空格tea.*$ 匹配任意以空格tea字符 对应的是 空格tea
1 正向引用 引用的是括号里匹配的字符串 1代表第一个括号内匹配的内容
[root@linux-node1 ~]# echo I am oldboy teacher. |sed ' s#^.*am ([a-z].*) tea.*$#1#g'
oldboy
[root@linux-node1 ~]# echo I am oldboy teacher. |sed ' s#I (.*) ([a-z].*) tea.*$#1 2#g'
am oldboy
企业案例4:系统开机启动项优化
sed -r 代表 扩展正则 使用了就不用进行转义类似 grep -E
chkconfig --list|grep 3:on|grep -Ev "sshd|network|rsyslog|sysstat|crond"|awk '{print $1}'|sed -r 's#(.*)#chkconfig 1 off#g'|bash
1.3.5、 特殊符号& 代表被替换的内容
#替换1到3行 C字符 替换为 --C--
[root@linux-node1 ~]# sed '1,3s#C#--&--#g' person.txt
101,benjamin,--C--EO
102,xiaozhang,--C--TO
103,Alex,--C--OO
104,yy,CFO
105,feixue,CI
#不加 -r 不起效果,
[root@linux-node1 ~]# sed '1,3s#(.*)#--&--#g' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#加 -r 启用扩展正则
[root@linux-node1 ~]# sed -r '1,3s#(.*)#--&--#g' person.txt
--101,benjamin,CEO--
--102,xiaozhang,CTO--
--103,Alex,COO--
104,yy,CFO
105,feixue,CIO
[root@linux-node1 data]# sed -r '1,3s#(.*),(.*),(.*)#--&--#g' ~/person.txt
--101,benjamin,CEO--
--102,xiaozhang,CTO--
--103,Alex,COO--
104,yy,CFO
105,feixue,CIO
企业案例5:批量重命名文件 去掉文件中_finished
[root@linux-node1 data]# for i in {1..5};do touch stu_10299_${i}_finished.jpg;done
[root@linux-node1 data]# ls
etcd stu_10299_1_finished.jpg stu_10299_3_finished.jpg stu_10299_5_finished.jpg
php-fpm.log stu_10299_2_finished.jpg stu_10299_4_finished.jpg
[root@linux-node1 data] ls *jpg|sed -r 's#(.*)_finished.*#mv & 1.jpg#g'|bash
[root@linux-node1 data]# ls
etcd stu_10299_1.jpg stu_10299_3.jpg stu_10299_5.jpg
php-fpm.log stu_10299_2.jpg stu_10299_4.jpg
1.4、查 p 正常和 -n 选项
一起使用 不加 -n 除了输出指定查询行还会默认输出所有行
[root@linux-node1 ~]# sed '2p' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# sed -n '2p' person.txt
102,xiaozhang,CTO
#p前面不加数字默认输出所有行
[root@linux-node1 ~]# sed -n 'p' person.txt #不加n所有输出2次
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# sed '' person.txt #什么不加相当于cat
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# sed -n '/CTO/,5 p' person.txt
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
2. 修改文件
#sed自带备份功能
[root@linux-node1 ~]# sed -i.ori 's#benjamin#NB#g' person.txt
[root@linux-node1 ~]# cat person.txt
101,NB,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# cat person.txt.ori
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#还原文件
[root@linux-node1 ~]# cat person.txt.ori > person.txt
[root@linux-node1 ~]# cat person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
3.另存文件
# w命令可以另存文件
[root@linux-node1 ~]# sed 'w output.txt' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# cat output.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# sed 's#benjamin#NB#g' 'w output.txt' person.txt
101,NB,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#保存指定行
[root@linux-node1 ~]# sed '5w output.txt' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# cat output.txt
105,feixue,CIO
4.替换命令S详解
sed '[address-range|pattern-range] s#original-string#replacement-string#[]'
sed ' [地址范围]|[模式范围] s#[被替换的字符串]#[替换后的字符串]#[替换标志]'
替换标志: g全局标志 数字标志1,2,3,。。。 打印p 写w 忽略大小写i 执行命令标志 e
[root@linux-node1 ~]# cat num.txt
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
4.1、g标志
#不加g标志 缺省默认为只修改指定行的第一列
[root@linux-node1 ~]# sed '2s#1#0#' num.txt
1 1 1 1 1
0 1 1 1 1
1 1 1 1 1
1 1 1 1 1
#加g标志 指定行的所有列
[root@linux-node1 ~]# sed '2s#1#0#g' num.txt
1 1 1 1 1
0 0 0 0 0
1 1 1 1 1
1 1 1 1 1
4.2、数字标志
#加 ng 标志 指定行的n列开始全部修改
[root@linux-node1 ~]# sed '2s#1#0#2g' num.txt
1 1 1 1 1
1 0 0 0 0
1 1 1 1 1
1 1 1 1 1
#第二行和第三行分别修改
[root@linux-node1 ~]# sed '2,3s#1#0#2g' num.txt
1 1 1 1 1
1 0 0 0 0
1 0 0 0 0
1 1 1 1 1
#缺省指定行的情况下默认 是所有行操作
[root@linux-node1 ~]# sed 's#1#0#2g' num.txt
1 0 0 0 0
1 0 0 0 0
1 0 0 0 0
1 0 0 0 0
#不加g 指定标志为n 即修改指定行的第n列
[root@linux-node1 ~]# sed 's#1#0#2' num.txt
1 0 1 1 1
1 0 1 1 1
1 0 1 1 1
[root@linux-node1 ~]# sed '2s#1#0#2' num.txt
1 1 1 1 1
1 0 1 1 1
1 1 1 1 1
1 1 1 1 1
1 0 1 1 1
4.3、p打印标志
# p标志匹配输出 -n取消默认输出
[root@linux-node1 ~]# sed -n 's#benjamin#NB#p' person.txt
101,NB,CEO
4.4、w 写入标志
[root@linux-node1 ~]# sed 's#benjamin#NB#w out.txt' person.txt
101,NB,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# cat out.txt
101,NB,CEO
# 如果加个; 先执行替换然后将默认输出 输出到指定文件内
[root@linux-node1 ~]# sed 's#benjamin#NB#;w out.txt' person.txt
101,NB,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# cat out.txt
101,NB,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
4.5、 忽略大小写 标志i grep -i也是忽略大小写
#不加 i 不能匹配Alex
[root@linux-node1 ~]# sed 's#alex#NB#g' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# sed 's#alex#NB#ig' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,NB,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# grep -i alex person.txt
103,Alex,COO
4.6、执行标志e
[root@linux-node1 ~]# cat file.txt
/etc/my.cnf
/etc/passwd
#注意命令结束后面接空格 不接空格会报错
[root@linux-node1 ~]# sed 's#^#ls -lh #e' file.txt
-rw-r--r-- 1 root root 251 127 2017 /etc/my.cnf
-rw-r--r-- 1 root root 1.8K 117 01:53 /etc/passwd
企业案例4:系统开机启动项优化
#使用bash执行
chkconfig --list|grep 3:on|grep -Ev "sshd|network|rsyslog|sysstat|crond"|
awk '{print $1}'|sed -r 's#(.*)#chkconfig 1 off#g'|bash
chkconfig --list|grep 3:on|grep -Ev "sshd|network|rsyslog|sysstat|crond"|
awk '{print $1}'|sed -r 's#(.*)#chkconfig 1 off#e’
4.7其他替换标志
l 在替换字符中使用l标志时,他会把紧跟在其后面的字符当作小写字符来处理
[root@linux-node1 ~]# sed -n 's#benjamin#BENlJAMIN#p' person.txt
101,BENjAMIN,CEO
L 在替换字符中使用L标志时,他会把后面所有的字符当作小写字符来处理
[root@linux-node1 ~]# sed -n 's#benjamin#BENLJAMIN#p' person.txt
101,BENjamin,CEO
u 在替换字符中使用l标志时,他会把紧跟在其后面的字符当作大写字符来处理
[root@linux-node1 ~]# sed -n 's#benjamin#benujamin#p' person.txt
101,benJamin,CEO
U 在替换字符中使用L标志时,他会把后面所有的字符当作大写字符来处理
[root@linux-node1 ~]# sed -n 's#benjamin#benUjamin#p' person.txt
101,benJAMIN,CEO
E 需要和U或L一起使用,它将关闭U或者L的功能。
[root@linux-node1 ~]# sed -r 's#(.*),(.*),(.*)#L3,E1,U2#g' person.txt
ceo,101,BENJAMIN
cto,102,XIAOZHANG
coo,103,ALEX
cfo,104,YY
cio,105,FEIXUE
[root@linux-node1 ~]# cat person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
5. 特殊符号= 获取取行号
[root@linux-node1 ~]# sed '=' person.txt
1
101,benjamin,CEO
2
102,xiaozhang,CTO
3
103,Alex,COO
4
104,yy,CFO
5
105,feixue,CIO
[root@linux-node1 ~]# sed '1,3=' person.txt
1
101,benjamin,CEO
2
102,xiaozhang,CTO
3
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# sed '/benjamin/=' person.txt
1
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#cat -n 也是可以显示
[root@linux-node1 ~]# cat -n person.txt
1 101,benjamin,CEO
2 102,xiaozhang,CTO
3 103,Alex,COO
4 104,yy,CFO
5 105,feixue,CIO
#N 不清空当前模式空间,然后读入下一行 以 分隔两行
[root@linux-node1 ~]# sed '=' person.txt|sed 'N;s# # #'
1 101,benjamin,CEO
2 102,xiaozhang,CTO
3 103,Alex,COO
4 104,yy,CFO
5 105,feixue,CIO
6. 一条sed语句执行多条sed命令
需求:删除第三行到末尾的数字,并把10替换为01
#方法一
[root@linux-node1 ~]# sed '3,$d' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
[root@linux-node1 ~]# sed '3,$d' person.txt|sed 's#10#01#g'
011,benjamin,CEO
012,xiaozhang,CTO
#方法二
[root@linux-node1 ~]# sed -e '3,$d' -e 's#10#01#g' person.txt
011,benjamin,CEO
012,xiaozhang,CTO
#方法三(推荐方法)
[root@linux-node1 ~]# sed -e '3,$d;s#10#01#g' person.txt
011,benjamin,CEO
012,xiaozhang,CTO
#方法四
[root@linux-node1 ~]# cat person.sed
3,$d
s#10#01#g
[root@linux-node1 ~]# sed -f person.sed person.txt
011,benjamin,CEO
012,xiaozhang,CTO
企业案例6:一个文件100行、把5,35,70行单独拿出来
[root@linux-node1 ~]# sed -n '5p;35p;70p' /etc/services
# IANA services version: last updated 2009-11-10
qotd 17/tcp quote
whois++ 63/udp
7. 特殊符号{}用法
#不加大括号,p执行2-4行,但是=号会执行所有行
[root@linux-node1 ~]# sed -n '2,4p;=' person.txt
1
102,xiaozhang,CTO
2
103,Alex,COO
3
104,yy,CFO
4
5
#大括号将所要执行的命令括起来,然后只执行选定的行号,类似乘法分配律
[root@linux-node1 ~]# sed -n '2,4{p;=}' person.txt
102,xiaozhang,CTO
2
103,Alex,COO
3
104,yy,CFO
4
[root@linux-node1 ~]# sed -n '2,4p;2,4=' person.txt
102,xiaozhang,CTO
2
103,Alex,COO
3
104,yy,CFO
4
8. 打印不可见字符l
[root@linux-node1 ~]# sed -n 'l' person.txt
101,benjamin,CEO$
102,xiaozhang,CTO$
103,Alex,COO$
104,yy,CFO$
105,feixue,CIO$
#加个tab键 显示
[root@linux-node1 ~]# sed -n 'l' person.txt
101,benjamin,CEO $
102,xiaozhang,CTO$
103,Alex,COO$
104,yy,CFO$
105,feixue,CIO$
9. 转换字符y命令
[root@linux-node1 ~]# tr 'abc' 'ABC' < person.txt
101,BenjAmin,CEO
102,xiAozhAng,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@linux-node1 ~]# sed 'y#abc#ABC#' person.txt
101,BenjAmin,CEO
102,xiAozhAng,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
10. 退出sed q命令(quit)
[root@linux-node1 ~]# sed 'q' person.txt
101,benjamin,CEO
[root@linux-node1 ~]# sed '3q' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
#不可以范围匹配
[root@linux-node1 ~]# sed '3,4q' person.txt
sed: -e expression #1, char 4: command only uses one address
[root@linux-node1 ~]# sed '3q;p' person.txt
101,benjamin,CEO
101,benjamin,CEO
102,xiaozhang,CTO
102,xiaozhang,CTO
103,Alex,COO
11. 从文件读取数据r命令(read)
[root@linux-node1 ~]# sed 'r num.txt' person.txt
101,benjamin,CEO
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
102,xiaozhang,CTO
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
103,Alex,COO
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
104,yy,CFO
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
105,feixue,CIO
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
#从最后一行开始读取文件追加,相当于合并文件 cat num.txt >> person.txt
[root@linux-node1 ~]# sed '$r num.txt' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
- 模式空间和保持空间
模式空间(pattern space):是sed软件从文件读取一行文本然后存入的缓冲区,然后命令操作模式空间的内容。
保持空间(hold space):是sed软件另外一个缓冲区,用来存放临时数据。Sed可以交换保持空间和模式空间的数据,但是不能在保持空间上执行普通的sed命令。
初始情况,模式空间和保持空间都是没有内容的。每次循环读取数据的过程中,模式空间内容都会被清空写入新的内容,但保持空间的内容保持不变,不会在循环中被删除,除非sed命令操作保持空间。
模式空间命令
n :清空当前模式空间,然后读入下一行
[root@linux-node1 ~]# sed -n 'p' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#先读取一行n命令清空后在执行p命令 完成一次循环
[root@linux-node1 ~]# sed -n 'n;p' person.txt
102,xiaozhang,CTO
104,yy,CFO
N :不清空当前模式空间,然后读入下一行,以 分隔两行
[root@linux-node1 ~]# sed '=' person.txt|sed 's# # #g'
1
101,benjamin,CEO
2
102,xiaozhang,CTO
3
103,Alex,COO
4
104,yy,CFO
5
105,feixue,CIO
==》模式空间的内容
1 101,benjamin,CEO
2 102,xiaozhang,CTO
3 103,Alex,COO
4 104,yy,CFO
5 105,feixue,CIO
==>s# # #
[root@linux-node1 ~]# sed '=' person.txt|sed 'N;s# # #'
1 101,benjamin,CEO
2 102,xiaozhang,CTO
3 103,Alex,COO
4 104,yy,CFO
5 105,feixue,CIO
企业案例7:密码文件test.txt 其中账号密码换行输出 现在要求 每行 账号=密码 这样 的格式输出 stu10301=21324cc1
[root@linux-node1 ~]#cat test.txt
stu10301
21324cc1
stu10302
ergtge23
stu10303
dfgeg22d
stu10304
dfgerw23
stu10305
sd3232df
stu10306
erwe234e
stu10307
werwe23d
stu10308
efwe331e
[root@linux-node1 ~]# sed 'N;s# #=#' test.txt
stu10301=21324cc1
stu10302=ergtge23
stu10303=dfgeg22d
stu10304=dfgerw23
stu10305=sd3232df
stu10306=erwe234e
stu10307=werwe23d
stu10308=efwe331e
12.操作多个文件
[root@linux-node1 ~]# sed 'N;s# #=#' test.txt person.txt
stu10301=21324cc1
stu10302=ergtge23
stu10303=dfgeg22d
stu10304=dfgerw23
stu10305=sd3232df
stu10306=erwe234e
stu10307=werwe23d
stu10308=efwe331e
101,benjamin,CEO=102,xiaozhang,CTO
103,Alex,COO=104,yy,CFO
105,feixue,CIO
- 模拟其他命令
#模拟cat命令
sed -n ‘p’ person.txt
sed ‘n’ person.txt
sed ‘N’ person.txt
sed ‘s# # #’ person.txt
#模拟grep命令
[root@linux-node1 ~]# sed -n '/ben/p' person.txt
101,benjamin,CEO
#模拟 grep -v 命令
[root@linux-node1 ~]# sed -n '/ben/ !p' person.txt
102,xiaozhang,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
# 模拟head命令
[root@linux-node1 ~]# sed -n '1,2p' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
[root@linux-node1 ~]# sed '3,$d' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
[root@linux-node1 ~]# sed '2q' person.txt
101,benjamin,CEO
102,xiaozhang,CTO
#模拟wc命令
[root@linux-node1 ~]# sed -n '$=' person.txt
5