sed文本处理工具的用法:

用法1:前置命令 | sed  [选项]  '条件指令'

用法2:sed  [选项]  '条件指令'  文件.. ..

(1)认识sed工具

sed命令的常用选项如下:

-n(屏蔽默认输出,默认sed会输出读取文档的全部内容)

-r(支持扩展正则)

-i(修改源文件)

  • 条件可以是行号或者/正则/,没有条件时默认为所有行都执行指令
  • 指令可以是p输出、d删除、s替换

(2)使用sed

案例一(按行号输出):

head -10 /etc/passwd  >   test       #准备素材

sed -n  'p'  test                    #输出所有行

sed -n  '2p'  test                #输出第2行

sed -n  '2,4p'  test               #输出2~4行

sed -n  '2p;4p' test               #输出第2行与第4行

sed -n '3,+1p'  test              #输出第3行以及后面1行

sed -n '1~2p' /etc/passwd            #输出奇数行

shell脚本之sed的使用_正则

案例二(使用正则当条件):

  1. sed -n '/^root/p' test           #输出以root开头的行
  2. sed -n '/root/p' test              #输出包含root的行
  3. sed -nr '/^root|^bin/p' test       #输出以root开头的行或bin开头的行,|是扩展正则,需要r选项

shell脚本之sed的使用_sed_02

案例三(sed工具的p、d、s操作指令案例集合):

head -10 /etc/passwd  >  a.txt       #准备素材

sed  -n '4p' a.txt            #输出第4行

sed  -n '4,7p' a.txt        #输出第4~7行

sed  -n '/^bin/p' a.txt        #输出以bin开头的行

sed  -n '$=' a.txt            #输出文件的行数

sed  '3,5d' a.txt             #删除第3~5行

sed  '/bash/d' a.txt            #删除所有包含bash的行

shell脚本之sed的使用_bash_03

sed  '/bash/!d' a.txt         #删除不包含xml的行,!符号表示取反

sed  '$d' a.txt                #删除文件的最后一行

sed  '/^$/d' a.txt             #删除所有空行

shell脚本之sed的使用_sed_04

vim  shu.txt                #新建素材

2017 2011 2018

2017 2017 2024

2017 2017 2017

shell脚本之sed的使用_sed_05

sed 's/2017/6666/' shu.txt            #把所有行的第1个2017替换成6666

sed 's/2017/6666/2' shu.txt        #把所有行的第2个2017替换成6666

sed '1s/2017/6666/' shu.txt        #把第1行的第1个2017替换成6666

shell脚本之sed的使用_正则_06

sed '3s/2017/6666/3' shu.txt        #把第3行的第3个2017替换成6666

sed 's/2017/6666/g' shu.txt         #所有行的所有个2017都替换

sed '/2024/s/2017/6666/g' shu.txt    #找含有2024的行,将里面的所有2017替换成6666

shell脚本之sed的使用_sed_07

实战:编写脚本,搭建httpd服务,用82号端口开启服务

#!/bin/bash

setenforce 0                            #关闭selinux

yum -y install httpd &> /dev/null        #安装网站

echo  "sed-test~~~" > /var/www/html/index.html        #定义默认页

sed  -i  '/^Listen 80/s/0/2/'  /etc/httpd/conf/httpd.conf        #修改配置文件,将监听端口修改为82

systemctl restart httpd                #开服务

systemctl enable httpd                #设置开机自启

shell脚本之sed的使用_sed_08

然后运行脚本

curl 192.168.2.5:82   #脚本运行之后,测试82端口看到页面即可    

sed-test~~~

ss -ntulp | grep httpd   #检查服务的端口是否为82