sed命令介绍

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 企业案例:系统开机启动案例

系统中必须运行的服务

  1. crond 定时任务
  2. sshd 远程连接服务
  3. network 网络服务
  4. rsyslog system log 系统日志服务

/var/log/cron

/var/log/messages

/var/log/secure

  1. 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'

 

posted @ 2017-12-21 18:59  巴黎斜塔  阅读(142)  评论(0编辑  收藏  举报