当前位置: 首页 > article >正文

shell——正则表达式入门

目录

一、常规匹配

二、特殊字符

^

$

.

*

字符区间

 \

三、示例


        shell中总是会需要对文本字符串做各种各样的剪切拼接等操作,除了 basename 和 dirname 这种简单的函数外,还可以用正则表达式,定义模糊匹配的筛选规则

一、常规匹配

        管道操作就是一种匹配方式,如用来查找用户:

[root@hadoop-master ~]# cat /etc/passwd | grep zxd
zxd:x:1001:1001::/home/zxd:/bin/bash

二、特殊字符

        正则的强大就是因为可以使用各种各样的特殊字符 

^

        匹配一行的开头,如 ^ab 表示以 ab 开头的所有行

[root@hadoop-master etc]# cat /etc/passwd | grep ^h
halt:x:7:0:halt:/sbin:/sbin/halt
hue:x:1000:1000::/home/hue:/bin/bash

$

        匹配一行的结束,如 zxd$ 表示以 zxd 结尾的所有行

[root@hadoop-master etc]# cat /etc/passwd | grep t$
halt:x:7:0:halt:/sbin:/sbin/halt

        一起使用 ^abc$,会匹配 abc,使用^$会匹配空行,加上-n参数会显示行号

[root@hadoop-master daily_archive_func]# cat daily_archive_func.sh | grep -n ^$
2:
9:
18:
22:
25:
29:
33:
41:
43:
44:
45:
46:

.

        匹配一个任意的字符,如a..b会显示包含a某某b的所有行

[root@hadoop-master etc]# cat passwd | grep -n r..t
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

*

        不单独使用,与上一个字符连用,表示匹配上一个字符连续出现0次,1次或多次,如ro*t会匹配rt、rot、root、rooot。。。等所在的所有行

        .*:任意字符出现任意次,空字符串也能匹配到

[root@hadoop-master etc]# cat passwd | grep -n ^z.*bash$
23:zxd:x:1001:1001::/home/zxd:/bin/bash

字符区间

[ ] 表示匹配某个范围内的一个字符

[6,8]------匹配 6 或者 8

[0-9]------匹配一个 0-9 的数字

[0-9]*------匹配任意长度的数字字符串

[a-z]------匹配一个 a-z 之间的字符

[a-z]* ------匹配任意长度的字母字符串

[a-c, e-f]-匹配 a-c 或者 e-f 之间的任意字符

 \

        \表示转义,并不会单独使用。由于所有特殊字符都有其特定匹配模式,而我们刚好想匹配特殊字符本身时,就会碰到困难。

        此时我们就要 将转义字符和特殊字符连用,再加上单引号引起来,来表示特殊字符本身,例如一个对于脚本,找出所有包含 '$' 的行

三、示例

        正则匹配手机号

        注意点:shell中的 -E 表示支持扩展的正则表达式,本身是不支持部分规则的,如{}


http://www.kler.cn/news/362887.html

相关文章:

  • DPDK如何提高网络性能
  • 【LLM之Agent】《Tool Learning with Large Language Models: A Survey》论文阅读笔记
  • JVM、字节码文件介绍
  • Centos7 将man手册内容转换为txt,pdf访问,并汉化
  • Flink 窗口触发器Triggers
  • 什么是3D模型?如何进行3D建模?应用领域有哪些?
  • Python知识点:基于Python工具,如何使用Stellar SDK进行金融应用开发
  • Java | Leetcode Java题解之第504题七进制数
  • Godot Zelda教程练习1
  • 基于neo4j的知识图谱展示系统
  • 深度学习 之 模型部署 使用Flask和PyTorch构建图像分类Web服务
  • 使用pyqt创建一个移动的矩形
  • 关于人工智能的一些展望
  • AI冲击,AI程序员-2024程序员危机与机遇并存
  • GO基础(string相关)
  • SQL 中查找重复数据的四种方法
  • 【功能超全】基于OpenCV车牌识别停车场管理系统软件开发【含python源码+PyqtUI界面+功能详解】-车牌识别python 深度学习实战项目
  • VuePress集成到Vue项目的方法
  • 【复旦微FM33 MCU 外设开发指南】外设篇1——硬件除法器
  • 算力的定义、单位、影响因素、提升方法、分类、应用等。附超算排名
  • Redis 五种数据类型详解
  • ChatGLM3-6B大模型部署+微调教程,收藏这一篇就够了!
  • 从0开始深度学习(18)——环境和分布偏移
  • 【毕业设计】工具大礼包之『Maven3.6.3安装与配置』
  • git 上传项目到 github 并生成二维码
  • 离散制造和流程制造分别是什么?它们有什么区别?