一键部署DHCP、DNS、LAMP、Mysql、samba、nfs、NTP
sed 处理文本内容
学习方法:
主要学习选项和条件
思路:sed是要替换vim的
语法结构:
1.前置命令 | sed 选项 ‘条件指令’
2.sed 选项 ‘条件指令’ 文件
//1.条件可以是行号或者/正则/
//2.没有条件是默认所有条件
//3.指令可以是增删改查指令
//4.默认sed会输出所有的内容,可以使用-n 屏蔽输出
//5.支持扩展正则,使用-r选型
常用的选项:
-n :屏蔽输出
-r :让sed支持扩展正则
-i :直接修改源文件,默认值通过内存进行修改,源文件无影响
//多个指令用分号;进行间隔
指令:
p : 输出
准备测试文件cp /etc/passwd ./passwd
1.打印第三行:
# sed -n ‘3p’ passwd
2.打印第3-5行:
# sed -n ‘3,5p’ passwd
3.打印第3行和第5行:
# sed -n ‘3p;5p’passwd
4.打印第3行以及后面的10行:
# sed -n ‘3,+10p’passwd
5.打印奇数行:
# sed -n ‘1~2p’passwd
6.打印偶数行:
# sed -n ‘2~2p’passwd
7.打印包含root的行:
# sed -n ‘/root/p’passwd
8.打印一bash结尾的行:
# sed -n ‘/bash$/p’passwd
‘$=’:输出文件的行数
指令:
p :输出
d :删除:
1.删除文件最后一行:
# sed ‘/KaTeX parse error: Expected 'EOF', got '#' at position 27: …t
2.删除文件空行:
#̲ sed ‘/^/d’tset.txt
s :替换:
# cat test.txt
2017 2018 2019
2017 2017 2019
2017 2017 2017
语法结构:
1. sed ‘s/old/new/’ tset.txt
//替换第一个匹配到的old
2. sed ‘s/old/new/g’test.txt
//替换所有匹配到的old
3. sed ‘s/old/new/2’test.txt
//替换每行匹配到的第2个
替换实现删除的效果:
1. sed ‘s/old//2’test.txt
//删除匹配到每行的第2个
2. sed -n ‘s/old/new/p’test.txt
//打印出替换之后的结果
实例演示: s指令
1.将test.txt 中每行第三个xml替换为XML
sed ‘s/xml/XML/3’ test.txt
2.将test.txt 中每行的xml删除
sed ‘s/xml//’ test.txt
3.将每行的/bin/bash替换为/bin/sh
sed 's/\/bin\/bash/\/sbin\/sh/g'
sed 's#/bin/bash#/bin/bash#'
4.将第4-7行加上注释 (每行开头加上#号)
# sed ‘4,7s/^/#/’ test.txt
5.将以#an 开头的注释去掉 (去掉每行开头的#号)
# sed ‘s/^#an/an/’ test.txt
6.删除文件中每行的第二个字符,最后一个字符(两次操作,需要用分号隔开)
# sed ‘s/.//2 ; s/.$//’ test.txt
7.将文件中每行的第一个和最后一个字符进行互换
# sed -r ‘s/^(.)(.*)(.)$/\3\2\1/’ test.txt
// -r 选项支持扩展正则
8.删除文件中所有数字
# sed ‘s/[0-9]//’ test.txt
9.删除行首的空格
# sed -r ‘s/^( )+//’ test.txt
10.为文件中每个的大写字母添加括号
# sed -r ‘s/[A-Z]/[\1]/g’
实例:编写一个ftp.sh脚本,用来安装配置匿名FTP服务
脚本实现功能:
1.通过yum安装vsftpd软件包
2.修改vsfatpd服务配置,开启匿名上传
3.调整/var/ftp/pub/目录权限,允许ftp写入
4.启动vsftpd服务,设置为开机自启
FTP服务安装及配置:
包名:vsftpd
配置文件: /etc/vsftpd/vsftpd.conf
端口: 20 21
黑名单文件: /etc/vsftpd/ftppusers
白名单文件: /etc/vsftpd/user_list
匿名传输:
#anonymous_enable=YES
允许本地用户登录:
#incal_enable=YES
#!/bin/bash
yum -y install vsftpd
//安装vsftpd软件
sed -i ‘s/^#an/s/^#//’ /etc/vsftpd/vsftpd.conf
//修改配置文件
chown ftp /var/ftp/pub
//调整目录权限
systemctl restart vsftpd
systemctl enbale vsftpd
sed 多文本处理:
完成以下操作:
修改主机配置文件
修改hosts文件,添加两条映射记录
192.168.1.2 www.aaa.com
192.168.1.3 www.bbb.com
多文本处理操作:
i :在指定的行之前插入文本
a :在指定的行之后插入文本
c :替换指定的行
语法结构:
# sed ‘2a XX’ a.txt //在第二行后面,追加XX
# sed ‘2i XX’ a.txt //在第二行前面,追加XX
# sed ‘2c XX’ a.txt //将第二行替换为XX
修改主机名配置文件:添加两条映射记录
192.168.1.2 www.aaa.com
192.168.1.3 www.bbb.com
sed ‘$a 192.168.1.2 www.aaa.com’ /etc/hosts
总结:
sed 选项 ‘条件指令’ 文件
选项:
-n :屏蔽默认输出
-r :支持扩展正则
-i :修改源文件
条件:
行号: 4 4,5 4~2 4,+10
/正则/
指令:
p :打印
d :删除
s :替换 s/旧/新/g
a :追加
i :插入
c :替换行
脚本实例:
编写一个getupwd.sh 实现以下需求:
1.找到使用bash作为登录shell的本地用户
2.列出这些用户的shadow密码记录
3.按照每行“ 用户名 —> 密码记录 ” 格式保存到getuowd.log
root - -> 111mQXHhaWYS$yONHc2AQw66XKrzJN2M.sYr/
实现思路:
1.先从/etc/passwd中取出以bash结尾的用户名
2.结合循环去遍历取出来的用户名,对/etc/shadow进行处理
3.采用掐头去尾方式,获得密码字符串
4.按照指定格式进行追加
#!/bin/bash
username=`sed ‘/bash$/s’ /etc/passwd`
for i in $username
do
passl=`grep $i /etc/shadow`
pass2=${pass1#*:}
pass3=${pass2%%:*}
echo “$i - -> $pass3” >> getupws.log
done