1.1 sed介绍
sed === stream editor流编辑器
1.2 sed功能与版本
处理纯文本文件、日志、配置文件等
1.3 sed命令常用的功能
1.3.1 查询
cat>person.txt<<EOF
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF
####查找 某一行-指定行号
[root@dzc ~]# sed -n '3p' person.txt
103,Alex,COO
###查找某一行-模糊
[root@dzc ~]# sed -n '/yy/p' person.txt
104,yy,CFO
###查找连续的行-指定行号
[root@dzc ~]# sed -n '3,5p' person.txt
103,Alex,COO
104,yy,CFO
105,feixue,CIO
###查找连续的行(找出从包含101的行到包含103的行)
[root@dzc ~]# sed -n '/101/,/103/p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
####表示某几行
[root@dzc ~]# sed -n '1p;4p' person.txt
101,oldboy,CEO
104,yy,CFO
1.3.2 增加
###我们想在文件中放入新的内容
####sed i/a
#i === insert 插入某一行的上一行
#a === append 追加到某一行的下面
[root@oldboyedu-40 ~]# sed '3i 100,tanjiaoshou,XO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
100,tanjiaoshou,XO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,lidao,UFO
[root@oldboyedu-40 ~]# sed '3a 100,tanjiaoshou,XO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
100,tanjiaoshou,XO
104,yy,CFO
105,feixue,CIO
106,lidao,UFO
1.3.3 删除
企业案例:打印文件内容但不包含oldboy的行
[root@oldboyedu-40 ~]# sed '/oldboy/d' person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,lidao,UFO
[root@oldboyedu-40 ~]# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
[root@oldboyedu-40 ~]# sed -n '/oldboy/!p' person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,lidao,UFO
1.3.4 替换 s
g global全局-把sed命令找到的内容都进行替换,sed默认只替换第一个找到的
[root@oldboyedu-40 ~]# sed 's#[0-9]#<&>#' person.txt
<1>01,oldboy,CEO
<1>02,zhangyao,CTO
<1>03,Alex,COO
<1>04,yy,CFO
<1>05,feixue,CIO
<1>06,lidao,UFO
[root@oldboyedu-40 ~]# sed 's#[0-9]#<&>#g' person.txt
<1><0><1>,oldboy,CEO
<1><0><2>,zhangyao,CTO
<1><0><3>,Alex,COO
<1><0><4>,yy,CFO
<1><0><5>,feixue,CIO
<1><0><6>,lidao,UFO
##把找到的第二个内容替换
[root@oldboyedu-40 ~]# sed 's#[0-9]#<&>#2' person.txt
1<0>1,oldboy,CEO
1<0>2,zhangyao,CTO
1<0>3,Alex,COO
1<0>4,yy,CFO
1<0>5,feixue,CIO
1<0>6,lidao,UFO
##sed 's#[0-9]#<&>#2' 把前面正则 匹配到的第二个 内容进行替换
[root@oldboyedu-40 ~]# sed 's#[0-9]#<&>#2g' person.txt
1<0><1>,oldboy,CEO
1<0><2>,zhangyao,CTO
1<0><3>,Alex,COO
1<0><4>,yy,CFO
1<0><5>,feixue,CIO
1<0><6>,lidao,UFO
1.3.5 单引号 双引号 不加引号
单引号 所见即所得 吃啥吐啥
[root@oldboyedu-40 ~]# echo '$LANG $(hostname) {a..e}'
$LANG $(hostname) {a..e}
双引号 特殊字符进行解析
[root@oldboyedu-40 ~]# echo "$LANG $(hostname) {a..e}"
en_US.UTF-8 oldboyedu-40 {a..e}
[root@oldboyedu-40 ~]# a=hello oldboy
-bash: oldboy: command not found
[root@oldboyedu-40 ~]# a="hello oldboy"
[root@oldboyedu-40 ~]# echo $a
hello oldboy
不加引号 支持 通配符
[root@oldboyedu-40 ~]# echo $LANG $(hostname) {a..e}
en_US.UTF-8 oldboyedu-40 a b c d e
[root@dzc ~]# sed "s#$sub#<&>#g" person.txt
101,<oldboy>,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@dzc ~]# aim=nihao
[root@dzc ~]# sed "s#$sub#$aim#g" person.txt
101,nihao,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
1.3.6 企业案例:系统开机启动案例
系统中必须运行的服务
- crond 定时任务
- sshd 远程连接服务
- network 网络服务
- rsyslog system log 系统日志服务
/var/log/cron
/var/log/messages
/var/log/secure
- sysstat 系统工具
###第一个里程碑-保留开启的服务
chkconfig |sed -r '/sshd|network|rsyslog|crond|sysstat/d'
###第二个里程碑-取出服务的名字
chkconfig |sed -r '/sshd|network|rsyslog|crond|sysstat/d'|sed -r 's#^(.*)0:.*$#1#g'
###第三个里程碑-拼接出想要的形式
#chkconfig 服务名字 off
chkconfig |sed -r '/sshd|network|rsyslog|crond|sysstat/d'|sed -r 's#^(.*)0:.*$#chkconfig 1 off#g'|bash
精简版
[root@dzc ~]# chkconfig|sed -nr '/sshd|network|rsyslog|sysstat|crond/!s#^(.*)0:.*#chkconfig 1 off#gp'