SHELL脚本编程:正则表达式 、 sed基本用法和sed文本块处理(SHELL----DAY30)

回顾
case分支
case 变量名称 in
模式1|XXX)
指令1;;
模式2)
指令2;;
模式3)
指令3;;
*)
指令n;;
esac

函数
函数名(){
指令
}

exit
break
continue

字符串截取
${变量名:}
字符串的替换
${变量名/}
字符串的删除
${变量名#} 掐头
${变量名%} 去尾

字符串的初值(备用值),变量非空时不使用
${变量名:-}

#!/bin/bash
read -p “请输入用户名” u
useradd $u
read -p “请输入密码” p //用户不输入直接回车时使用123456作为密码
echo ${p:-123456} | passwd --stdin $u

正则表达式 可以配合某工具对文档进行 过滤筛选
grep ^root user 找开头是root的行
grep bash$ user 找结尾是bash的行
grep “bash$” user
grep “r” user 找字母r
grep “ro” user 找字串ro
grep “[ro]” user 找字母r或者o
grep “[a-z]” user 找所有小写字母
grep “[A-Z]” user 找所有大写字母
grep “[a-Z]” user 找所有字母
grep “[0-9]” user 找所有数字
grep “[^ro]” user 找r或者o之外的内容
grep “[^0-9]” user 找数字之外的内容

grep “.” user 找任意单个字符
grep “roo.” user 找roo+任意1个字符
grep “ro…” user 找ro+任意2个字符
grep “r…” user 找r+任意3个字符
grep “o*” user 找有o出现任意次的行,零次也行
grep “r*” user
grep “ro*t” user 找rt之间出现任意个o的行

grep “.” user 找任意单个字符,包括空格
grep “." user 找任意,包括空行
grep "
” user 不能单独使用星号

grep “ro{2,3}t” user 找rot,其中o可以出现2~3次
grep “ro{3,4}t” user 找rot,其中o可以出现3~4次
grep “ro*t” user 找rot,其中o可以出现任意次
grep “ro{1,2}t” user
grep “ro{2,4}t” user
grep “ro{0,4}t” user 找rot,其中o可以出现0~4次
grep “ro{0,9}t” user
grep “ro{3}t” user 找rot,其中o出现3次
grep “ro{8}t” user 找rot,其中o出现8次
grep “ro{1,}t” user 找rot,其中o出现1次以及1次以上
grep ro{1,}t user 不加引号,搜索失败

grep “(😇{2}” user 找0:0:
grep “ro{2}t” user 找rot,o出现2次
grep -E “ro{2}t” user 效果同上,扩展正则
egrep “ro{2}t” user 效果同上,扩展正则
egrep “ro{1,3}t” user 扩展正则找rot,o出现1~3次
grep “ro{1,}t” user 找rot,o可以出现1次以及1次以上
egrep “ro{1,}t” user 效果同上
egrep “ro+t” user 效果同上
grep “ro{0,1}t” user 找rot,o可以出现0~1次
egrep “ro{0,1}t” user 效果同上
egrep “ro?t” user 效果同上

字母数字下划线

vim 增删改查
sed 流式编辑器,可以对文本文件进行非交互式增删改查, 逐行处理

sed使用方式
1, 前置命令 | sed 选项 (定址符)指令
2,sed 选项 (定址符)指令 被处理的文件

选项 -n 屏蔽默认输出
-r 支持扩展正则
-i 写入文件
指令 p 输出
d 删除
s 替换

sed ‘p’ user 输出user文件的所有行,包括默认输出的行
sed -n ‘p’ user 输出user文件的所有行,没有默认输出
sed -n ‘1p’ user 输出第1行
sed -n ‘2p’ user 输出第2行
sed -n ‘3p’ user
head -2 user |tail -1
sed -n ‘1,3p’ user 输出1~3行
sed -n ‘1p;3p’ user 输出第1行与第3行

free | sed -n ‘2p’ 输出free指令生成的文档的第2行
sed -n ‘1,+2p’ user 输出第1行以及后面2行
sed -n ‘3,+1p’ user 输出第3行以及后面1行
sed -n ‘1~2p’ user 输出奇数行
sed -n ‘2~2p’ user 输出偶数行
sed -n ‘/root/p’ user 输出有root单词的行
sed -n ‘/^root/p’ user 输出以root开头的行

sed ‘d’ user 删除所有行
sed ‘1d’ user 删除第1行, 显示剩余行
sed ‘5d’ user 删除第5行
sed ‘1,3d’ user 删除1~3行
sed ‘1d;3d’ user 删除第1行,第3行
sed ‘3,+2d’ user 删除第3行以及后面2行
sed ‘/bash$/d’ user 删除以bash结尾的行

s/// 替换

如何把/bin/bash换成/sbin/sh
sed ‘s//bin/bash//sbin/sh/’ user 使用转义符号,但不方便
sed ‘s#/bin/bash#/sbin/sh#’ user 更改替换符号
sed ‘s)/bin/bash)/sbin/sh)’ user 更改替换符号

sed ‘s/2017/XXXX/’ test 将每行的第1个2017换成XXXX
sed ‘s/2017/XXXX/2’ test 将每行的第2个2017换成XXXX
sed ‘s/2017/XXXX/g’ test 将每行的所有2017换成XXXX
sed ‘2s/2017/XXXX/’ test 将第2行的第1个2017换成XXXX
sed ‘3s/2017/XXXX/2’ test 将第3行的第2个2017换成XXXX
sed ‘3s/2017//2’ test 将第3行的第2个2017删除
sed -n ‘s/2024/XXXX/p’ test 将所有行的2024换成xxxx并显示


删除文件中每行的第二个、最后一个字符
sed ‘s/.//2;s/.$//’ nssw

将文件中每行的第一个、倒数第1个字符互换
sed -r ‘s/^(.)(.*)(.)$/\3\2\1/’ nssw

删除文件中所有的数字
sed -i ‘s/[0-9]//g’ nssw

为文件中每个大写字母添加括号
sed -r ‘s/([A-Z])/(\1)/g’ nssw


编写脚本,搭建ftp服务,并且实现匿名上传功能

#!/bin/bash
yum -y install vsftpd &> /dev/null
sed -i ‘/#anon_u/s/^#//’ /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
systemctl enable vsftpd
chmod 777 /var/ftp/pub

最后关闭防火墙和selinux,在真机中打开ftp://172.25.0.11进入pub目录,可以拖拽文件进去则成功.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值