Shell编程基础(十三)正则表达式

这篇具有很好参考价值的文章主要介绍了Shell编程基础(十三)正则表达式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

正则表达式

格式:^ 表达式 $
在不同的场景下,定义是一样,但使用要按照具体的命令去调用,中间的表达式都是通用的

元数据

普通元字符

所谓元数据,就是描述数据的数据,在这里就是描述正则的数据

  • ^ 表示正则从字符串整行起始位置匹配
    ^abc 匹配 以abc开始的字符串
  • $ 表示正则一直匹配到字符串整行结束位置
    abc$ 匹配以abc结尾的字符串

如果一个正则表达式不是^开始,表示不限制字符串前缀内容,如果不是$结束,则不限制字符串后缀内容,如果都没有,则表示任意位置匹配上都算成功

[root@origin ~]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@origin ~]# cat /etc/passwd | grep ^root
root:x:0:0:root:/root:/bin/bash



[root@origin ~]# grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
kalpana:x:1000:1000:kalpana:/home/kalpana:/bin/bash
zp:x:1001:1001::/home/zp:/bin/bash
[root@origin ~]# cat /etc/passwd | grep bash$
root:x:0:0:root:/root:/bin/bash
kalpana:x:1000:1000:kalpana:/home/kalpana:/bin/bash
zp:x:1001:1001::/home/zp:/bin/bash
  • . 一个点,匹配一个任意字符

  • " * " 星号,匹配左侧紧挨的那个字符 0次或多次;如 “123*”:匹配 12 和 12后面紧跟3的字符串(123,1233,1234.但是不匹配 124
    **直觉上直接就是前缀匹配前面的固定字符,但实际还可以匹配 去掉*左侧紧挨的那个字符后的字符串

  • .* 根据上面 星号的定义,可以得出 .* 可以匹配任意字符串

  • [] 匹配括号内任意一个字符。 1[abc]2 可以匹配 1a2 1b2 1c2

  • [^] 不匹配括号内所有字符。1[^ab]2 可以匹配除了 1a2 和 1b2 之外的字符串

  • [-] 匹配一个连续的范围。[0-9] 匹配一个 0-9的字符

  • \ 转义符,这在各种编程语言中都是存在的,其目的是去掉一些原本带有特殊含义的字符代表的特殊含义,使其变成字面意思。只作用在一个字符上

  • ‘’ “” 单引号 / 双引号 也可以转义,但是他俩带有边界,可能影响原有字符串 引号的边界。‘’ 单引号为强引用,其内部所有字符均被转义; “” 双引号为弱引用,其内部部分字符被转义;比如空格被转义,但是可以使用 $获取变量

  • \< 词首(空格隔开为一个词,词首可能不是整行第一个单词)匹配 <abc。匹配形如 abcxxx 或者 xxx abcxxx 的字符串

  • \> 词尾(空格隔开为一个词)匹配 >abc。 匹配形如 xxxabc 或者 xxxabc xxx 的字符串

  • () 将多个字符视为一个整体,用于后面匹配,替换等操作
    如:给匹配上的字符串增加一个前缀 s/(^bc)xx/\1de/ ;匹配 bcxx开头的字符串,然后 \1 的值就是前面^bc命中的字符串括号内的部分,然后把()内的字符串(也就是bc)取出来,并将后面的xx换成de。
    \1 代表前面第一个()内的内容
    \2 代表前面第二个()内的内容
    依次类推

    s/查找字符串/要替换的字符串/

  • x{m} 匹配 前导字符 重复的次数。这里意味着匹配m * n个x(n 正整数)

  • x{m,} 匹配 前导字符 重复次数大于等于 m

  • x{m,n} 匹配 前导字符 重复次数大于等于 m 小于等于n

扩展元字符

grep 默认只支持普通元字符,要使用扩展元字符,要么使用 grep -E 选项 要么使用 egrep 命令

测试文本如下

a
ab
ac
abc
abbc
abbbc
abbbcc
  • +
    匹配一个或多个前导字符,和 * 的区别在于 * 匹配的是0个或多个前导字符,而 + 是1个或多个。ab+c 匹配 abc abbc abbbc
    ab*c 匹配 ac abc abbc abbbc
    相当于 * 比 + 多了一种不包含前导字符的情况。
grep "ab*c" test_reg.txt
ac
abc
abbc
abbbc
abbbcc


grep -E "ab+c" test_reg.txt
abc
abbc
abbbc
abbbcc

egrep "ab+c" test_reg.txt
abc
abbc
abbbc
abbbcc

  • 匹配 0 或 1个 前导字符

  • |
    匹配 | 分隔的任意一项

  • ()
    将多个字符作为一个整体进行匹配。如果没有()分割,则会将原本分隔的地方前后的字符串当作一个字符串处理
    abc(de|aa):这里就匹配 abcde 或者 abcaa
    如果不加()
    abcde|aa:则变成了 匹配 abcde 或者 aa

  • \w
    字母数字

  • \W
    符号(非字母数字)

  • \b
    词首,词尾

  • \s
    空格

总结

^ 和 < 的区别 以及 $ 和 > 的区别

上述2种区别都类似:
^ $ 匹配的是整个字符串的首尾
而 \< \> 匹配的是字符串中的词(整个字符串根据空格可以拆分成多个词)的首尾

* + ? {}的区别

  • ’ * ’ :星号代表的是 0 或者 多个 前导字符
    abc* 等同于 abc{0,}

  • ’ + ’ :代表匹配 1个 或者 多个 前导字符
    abc+ 等同于 abc{1,}

  • ? 代表 0个 或者 1个 前导字符
    abc? 等同于 abc{0,1}文章来源地址https://www.toymoban.com/news/detail-634689.html

到了这里,关于Shell编程基础(十三)正则表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux Shell 脚本编程学习之【第3章 正则表达式 (第二部分) grep命令】

    1、文本搜索工具 2、GREP 是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式并把行打印出来。 3、grep命令的模式十分灵活,可以是字符串,也可以是变量,还可以是正则表达式。模式中包含空格,则必须用双引号括起来。 选 项 意 义 -c 只输出匹配行

    2024年02月16日
    浏览(39)
  • Shell编程之正则表达式

    Linux中的正则表达式(regular expression)和通配符(wildcard)都是用于匹配字符串的工具,但它们之间存在一些区别和应用场景的不同。 正则表达式是描述一种字符串匹配的模式,通过特殊的字符和语法,可以检查一个字符串是否匹配某种模式,匹配成功后可以进行子串替换、取出符

    2024年02月01日
    浏览(35)
  • 【shell编程入门】正则表达式

    特殊字符 描述 [] 方括号表达式,表示匹配的字符集合,例如  [0-9] 、 [abcde] () 标记子表达式起止位置 * 匹配前面的子表达式零或多次 + 匹配前面的子表达式一或多次 ? 匹配前面的子表达式零或一次 转义字符,除了常用转义外,还有: b  匹配单词边界; B  匹配非单词边

    2024年01月23日
    浏览(43)
  • Linux Shell :正则表达式

    先来看一句 Shell 代码: dpkg --list : dpkg 是 Debian 系列 Linux 发行版(如 Ubuntu)的包管理工具。 --list 选项用于列出所有已安装的软件包。 | :这是一个管道符号,用于将前一个命令的输出作为后一个命令的输入。在这里, dpkg --list 的输出被直接传递给 grep 命令。 grep -E -o \\\'cu

    2024年02月08日
    浏览(31)
  • Linux:shell脚本 正则表达式与AWK

    目录   一、正则表达式 1.2元字符  1.3表示次数 1.4位置锚定 1.5分组或其他 1.6扩展正则表达式 1.7grep 二、AWK awk -F ​编辑三、sed 1.sed简介 2.sed工作流程 3.sed命令格式 3.1打印全部内容  3.2 查看文件,打印全部内容  3.3打印指定行内容 3.4支持正则表达式,打印范围内容  3.5#,/关

    2024年02月12日
    浏览(29)
  • linux中shell脚本——shell数组、正则表达式及文件三剑客之AWK

    目录 一.shell数组 1.1.数组分类 1.2.定义数组方法 二.正则表达式 2.1.元字符 2.2.表示次数 2.3.位置锚定 2.4.分组 2.5.扩展正则表达式 三.文本三剑客之AWK 3.1.awk介绍及使用格式 3.2.处理动作 3.3.awk选项 3.4.awk处理模式 2.5.awk常见的内置变量  2.6.if条件判断 1.1.数组分类 ①关联数组:必

    2024年02月12日
    浏览(29)
  • shell脚本正则表达式

    声明: 以下内容为个人笔记,内容不完全正确,请谨慎参考。 含义: 正则表达式使用的每个单独字符串来描述、匹配一些列符合语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中,grep,sed,awk等文本处理工具都支

    2024年04月22日
    浏览(29)
  • shell 正则表达式详解

    目录 正则表达式 一,什么是正则表达式 二,为什么使用正则表达式 三,如何使用正则表达式 示例: 四,基本正则表达式 基本正则表达式示例: 正则表达式字符集示例: 五,扩展正则表达式 扩展正则表达式示例: 扩展:        正则表达式是通过一些特殊字符的排列,

    2024年01月17日
    浏览(33)
  • 【Go】Go 文本匹配 - 正则表达式基础与编程中的应用 (8000+字)

             本文共计8361字,预计阅读时间18分钟         正则表达式(Regular Expression, 缩写常用regex, regexp表示)是计算机科学中的一个概念,很多高级语言都支持正则表达式。 目录 何为正则表达式 语法规则 普通字符 字符转义 限定符 定位符 分组构造 模式匹配 regexp包

    2024年02月12日
    浏览(28)
  • Shell通配符和正则表达式

    目录 ​​​​​​​grep 通配符 正则表达式 grep家族有三大成员分别为:         grep:支持使用基本正则表达式。         egrep:支持使用扩展正则表达式。         fgrep:不支持使用正则表达式,即所有的正则表达式中的元字符都将作为一般字符,仅仅 拥有其字

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包