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 #输出奇数行
案例二(使用正则当条件):
- sed -n '/^root/p' test #输出以root开头的行
- sed -n '/root/p' test #输出包含root的行
- sed -nr '/^root|^bin/p' test #输出以root开头的行或bin开头的行,|是扩展正则,需要r选项
案例三(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的行
sed '/bash/!d' a.txt #删除不包含xml的行,!符号表示取反
sed '$d' a.txt #删除文件的最后一行
sed '/^$/d' a.txt #删除所有空行
vim shu.txt #新建素材
2017 2011 2018
2017 2017 2024
2017 2017 2017
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
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
实战:编写脚本,搭建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 #设置开机自启
然后运行脚本
curl 192.168.2.5:82 #脚本运行之后,测试82端口看到页面即可
sed-test~~~
ss -ntulp | grep httpd #检查服务的端口是否为82