--字符串
字符串的初值(备用值),变量非空是不可使用
${变量名:-xxxxx}
-------------------------------------------------------------------------------------------------
一丶正则表达式
正则表达式 可以配合某工具对文档进行过滤筛选
head -5 > user
grep '^root' user //以root开头的行
grep 'bash$' user //以bash结尾的行
grep '[0-9]' user //筛选出0-9的数字
grep '[^0-9]' user //排除所有0-9的数字
grep 'roo.' user //筛选roo开头的匹配单个字符
grep 'ro*t' user //筛选出现任意次o的字符,可以是0次---rt rot rooooot
像 小部件
grep "\(0:\)\{2\}" user //筛选0:出现两次的字符串
扩展正则表达式
图像 小部件
二丶sed 流式编辑器
图像 小部件可以对文本文件进行非交互式增删改查,逐行处理
sed使用方式
1.前置命令|sed 选项 (定址符)指令o
2.sed 选项(定址符)指令 被处理文件
选项
-n 屏蔽默认输出
-r 支持扩展正则
-i 写入文件
指令
p 输出
d 删除
s 替换
[root@svr5 ~]# sed 'd' /etc/passwd //删除所有行
[root@svr5 ~]# cat /etc/passwd //查看原始文本,并未改动
[root@svr5 ~]# sed -i '1,4d' test.txt //删除操作
[root@svr5 ~]# cat test.txt //确认删除结果
[root@svr5 ~]# sed -n 'p' a.txt //输出所有行,等同于cat a.txt
[root@svr5 ~]# sed -n '4p' a.txt //输出第4行
[root@svr5 ~]# sed -n '4,7p' a.txt //输出第4~7行
[root@svr5 ~]# sed -n '4,+10p' a.txt //输出第4行及其后的10行内容
[root@svr5 ~]# sed -n '/^bin/p' a.txt //输出以bin开头的行
[root@svr5 ~]# sed -n '$=' a.txt //输出文件的行数
[root@svr5 ~]# sed 's/xml/XML/' a.txt //将每行中第一个xml替换为XML
[root@svr5 ~]# sed 's/xml/XML/3' a.txt //将每行中的第3个xml替换为XML
[root@svr5 ~]# sed 's/xml/XML/g' a.txt //将所有的xml都替换为XML
[root@svr5 ~]# sed 's/xml//g' a.txt //将所有的xml都删除(替换为空串)
[root@svr5 ~]# sed 's#/bin/bash#/sbin/sh#' a.txt //将/bin/bash替换为/sbin/sh
[root@svr5 ~]# sed '4,7s/^/#/' a.txt //将第4~7行注释掉(行首加#号)
[root@svr5 ~]# sed 's/^#an/an/' a.txt //解除以#an开头的行的注释(去除行首的#号)
1)删除文件中每行的第二个、最后一个字符
分两次替换操作,第一次替换掉第2个字符,第二次替换掉最后一个字符:
[root@svr5 ~]# sed 's/.//2 ; s/.$//' nssw.txt
2)将文件中每行的第一个、倒数第1个字符互换
每行文本拆分为“第1个字符”、“中间的所有字符”、“倒数第1个字符”三个部分,然后通过替换操作重排顺序为“3-2-1”:
[root@svr5 ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' nssw.txt
3)删除文件中所有的数字
因原文件内没有数字,行首也没有空格,这里稍作做一点处理,生成一个新测试文件:
[root@svr5 ~]# sed 's/[0-9]//' nssw.txt
4)为文件中每个大写字母添加括号
使用“()”可实现保留功能,所以可参考下列操作解决:
[root@svr5 ~]# sed -r 's/([A-Z])/[\1]/g' nssw.txt
删除所有数字、行首空格的操作如下:
[root@svr5 ~]# sed -r 's/[0-9]//g;s/^( )+//' nssw2.txt
案例
1)任务需求及思路分析
vsftpd服务的安装、改目录权限、起服务等操作可以直接写在脚本中。
修改vsftpd.conf配置的工作可以使用sed命令,根据默认配置,只需要定位到以#anon开头的行,去掉开头的注释即可。
2)根据实现思路编写脚本文件:
[root@svr5 ~]# vim anonftp.sh
#!/bin/bash
yum -y install vsftpd //安装vsftpd软件
cp /etc/vsftpd/vsftpd.conf{,.bak} //备份默认的配置文件
sed -i "s/^#anon/anon/" /etc/vsftpd/vsftpd.conf //修改服务配置
chmod 777 /var/ftp/pub //调整目录权限
systemctl start vsftpd //启动服务
systemctl enable vsftpd //设为自动运行
[root@svr5 ~]# chmod +x anonftp.sh
[root@svr5 ~]# ./anonftp.sh