没有合适的资源?快使用搜索试试~ 我知道了~
Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07Linux-shell编程07
资源推荐
资源详情
资源评论
sed进阶
正则表达式练习题
##计算PATH⽬录下的⽂件数
PATH⽬录下的都是⼆进制命令⽂件
1.查看PATH值
[root@gitlab01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
2.获取每个⽬录的字符串,利⽤sed替换功能
[root@node02 ~]# echo $PATH|sed 's/:/ /g'
/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /root/bin
3.分离⽬录后,可以for循环遍历取值了
[root@node02 ~]# my_path=$(echo $PATH|sed 's/:/ /g')
[root@node02 ~]# for dir in $my_path;do echo $dir;done
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin
4.最终计算⽂件脚本
[root@node02 tmp]# cat test.sh
#!/bin/bash
# 超哥带你学shell编程
my_path=$(echo $PATH|sed 's/:/ /g')
count=0
for dir in $my_path
do
check_dir=$(ls $dir)
for item in $check_dir
do
count=$[ $count + 1 ]
done
echo "$dir ---- $count"
count=0 # 归零,否则影响全局的count数量
done
[root@node02 tmp]# bash test.sh
/usr/local/sbin ---- 0
/usr/local/bin ---- 0
/usr/sbin ---- 540
/usr/bin ---- 1139
/root/bin ---- 0
www.apecome.com
猿来教育Linux云计算
##验证电话号码
总结
此时可以集合sed,awk进⾏对电话号码过滤验证。
# 对于⼀些数据表单的输⼊,例如电话号码,输⼊错误,需要进⾏检测
以下是美国电话号码格式
(123)456-7890
(123) 456-7890
123-456-7890
123.456.7890
这也就表明了电话输⼊的格式,可以有四种,因此你的正则必须完美的校验上述电话形式。
1.正则构建,最好从左边开始,先判断是否有空格
^\(? ! 脱字符后⾯跟着转义符和括号,问号表示括号,可有可⽆
2.紧接着是三位区号,美国区号从2开始,没有0或1,最⼤到9结束
[2-9][0-9]{2} 这表示第⼀个数字是2-9,第⼆个是0-9,第三个同样
3.区号后⾯的括号,也是可有可⽆的,因此
\)?
4.从上述的电话看出,区号后⾯,可能有单破折线,或者空格,或者什么都没有,或者⼩数点,可以这么写
(| |-|\.)
如此的写法表示,⾸先括号分组,后⾯也是同样的规则
然后⽤管道符进⾏表示,四种状态,空,空格,横杠,⼩数点
5.再接着是三位电话交换机号码,数字即可
[0-9]{3}
6.在电话交换机号码后⾯,必须有⼀个空格,⼀个单破折现,或者⼀个点。(这次不存在没有空格的情况),因此
( |-|\.)
7.最后就是尾部匹配4位本地电话分机号
[0-9]{4}$
完整的匹配模式
^\(?[2-9][0-9]{2}\)?(| |-|\.)[0-9]{3}( |-|\.)[0-9]{4}$
[root@node02 tmp]# cat phone_list
000-000-0000
123-456-7890
212-555-1234
(317)555-1234
(202) 555-9876
33523
1234567890
234.123.4567
[root@node02 tmp]#
[root@node02 tmp]#
www.apecome.com
猿来教育Linux云计算
##解析邮件地址
邮件地址是⼿机号之外的另⼀⼤通信⽅式,也存在千奇百怪的格式。
username@hostname
点号
单破折线
加号
下划线
有效的邮件⽤户名⾥,这些字符都有可能存在组合。
邮件地址hostname格式是 ⼀个或多个域名和⼀个服务器名字组成,也有⼀定的规则。
点号
下划线
案例
[root@node02 tmp]#
[root@node02 tmp]# cat phone_list | awk '/^\(?[2-9][0-9]{2}\)?(| |-|\.)[0-9]{3}( |-|\.)[0-9]
{4}$/{print $0}'
212-555-1234
(317)555-1234
(202) 555-9876
234.123.4567
1.左侧的⽤户名正则,⽤户名⾥可以有多个有效字符
^([a-zA-Z0-9_\-\.\+]+)@. 中括号⾥的字符,匹配⼀次或者任意多次
这个分组指定了⽤户名中允许出现的字符,正则加号,确保⾄少有⼀个字符
2.hostname的匹配规则
([a-zA-Z0-9_\-\.]+)
这样的模式,可以匹配,例如
server
server.subdomain
server.subdomain.subdomain
3.顶级域名的匹配规则,也就是例如.cn .com .org此类
顶级域名只能是字⺟,不少于⼆个字符,⻓度不搞过五个字符。
\.([a-zA-Z]{2,5})$
4.因此整个的匹配邮箱的规则,可以是
^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
www.apecome.com
猿来教育Linux云计算
sed进阶
sed编辑器可以满⾜⼤多数⽇常⽂本需求,这⾥超哥在给⼤家讲讲些⾼级⽤法。
多⾏命令
sed命令的特点是单⾏数据操作,基于换⾏符的位置吧数据分成⾏。然后sed⼀⾏⼀⾏的处理,重复过程。
如果需要跨⾏对数据处理,这就麻烦了。
⽐如⽂本⾥找⼀个短语 Linux System Administrators Group ,这个⻓语句可能出现在两⾏,默认的sed就⽆
法识别这种短语。
sed开发者也考虑到了这个情况,提供了处理⽅案。
sed特殊指令
N: 将数据流中的下⼀⾏加进来,创建⼀个多⾏组处理,multiline group
D:删除多⾏组的⼀⾏
P:打印多⾏组的⼀⾏
next命令
sed⼩写的n命令会告诉sed编辑器移动到数据流中的下⼀⾏⽂本。
sed编辑器再移动到下⼀⾏⽂本前,会在当前⾏执⾏完毕所有定义好的命令。单⾏next命令改变了这个流程。
使⽤该正则,就可以过滤掉不正确的邮件地址
[root@node02 tmp]# cat email_list
yuchao@163.com
yy@163.com.
yy@ee.n
yy.city@163.now
yy_city@163.cn
yy#city@163.cc
yy+city@163.cc
yy*city@163.org
[root@node02 tmp]#
[root@node02 tmp]#
[root@node02 tmp]# cat email_list | awk '/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]
{2,5})$/{print $0}'
yuchao@163.com
yy.city@163.now
yy_city@163.cn
yy+city@163.cc
www.apecome.com
猿来教育Linux云计算
看下案例。
若是我们想要指定删除某个语句后⾯的空⾏,可以⽤n指令。
此时sed编辑器匹配到apple这⼀⾏后,通过n指令,让sed编辑器移动到⽂本的下⼀⾏,也就是空⾏,然后通过d指
令,删除了该⾏。
此时sed执⾏完毕命令后,继续重复查找apple,然后尝试删除apple的下⼀⾏。
如果找不到apple字符串,也就不会执⾏任何动作了。
合并⽂本⾏
刚才使⽤⼩写的n将⽂本的下⼀⾏移动到sed的 模式空间 ,属于是单⾏处理。
⼤写的N指令将下⼀⾏⽂本添加到模式空间中已经有的⽂本的后⾯,实现多⾏⽂本处理。
这个作⽤是将数据流的两个⽂本⾏合并在同⼀个模式空间⾥处理。
# 数据⽂件
[root@node02 tmp]# cat data.txt
This is an apple.
This is a boy.
This is a gril.
[root@node02 tmp]#
[root@node02 tmp]#
[root@node02 tmp]#
[root@node02 tmp]# sed '/^$/d' data.txt
This is an apple.
This is a boy.
This is a gril.
这种写法是删除空⾏
# 删除apple下⼀⾏的空格
[root@node02 tmp]# cat data.txt
This is an apple.
This is a boy.
This is a gril.
[root@node02 tmp]#
[root@node02 tmp]#
[root@node02 tmp]# sed '/apple/{n;d}' data.txt
This is an apple.
This is a boy.
This is a gril.
www.apecome.com
猿来教育Linux云计算
剩余20页未读,继续阅读
资源评论
广西千灵通网络科技有限公司
- 粉丝: 4245
- 资源: 58
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WS2-32.lib,在编译程序中可以链接使用
- 秒懂傅里叶变换matlab程序实现过程
- ZEND解密dezender12
- sony 索尼IMX334摄像头模组电路板AD版硬件PCB图(6层板).zip
- 基于flask和echarts融合交易策略的bitfinex可视化微服务.zip
- 包含了wvp-assist.tar wvp-talk.tar zlmediakit.tar .
- 3r4efgh53wgrf43tw
- 2024新版Java基础从入门到精通全套视频+资料下载
- Spring AI大模型视频教程+ChatGPT视频教程+OpenAI大模型视频教程(资料+视频教程)
- ABB工业机器人教程PDF版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功