Linux Shell 脚本编程学习之【第3章 正则表达式 (第一部分)】

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

1 正则表达式基础

1、正则表达式是由一串字符和元字符构成的字符串,简称 RE(Regular Expression)。
2、正则表达式起到数据过滤作用。
3、POSIX 标准将正则表达式分为两类:基本的正则表达式和扩展的正则表达式,大部分 Linux 应用和工具仅支持基本的正则表达式。

Linux Shell 以一串字符作为表达式向系统传达意思。元字符 (Metacharacters) 是用来阐 释字符表达式意义的字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内 容、转换及各种操作信息进行描述。正则表达式是由一串字符和元字符构成的字符串,简称 RE(Regular Expression)。 正则表达式的主要功能是文本查询和字符串操作,它可以匹配文 本的一个字符或字符集合。

基本的正则表达式元字符集合及其意义

符 号 意 义
* 0个或多个在*字符之前的那个普通字符
. 匹配任意字符
A 匹配行首,或后面字符的非
$ 匹配行尾
1 匹配字符集合
\ 转义符,屏蔽一个元字符的特殊意义
< 精确匹配符号
\n} 匹配前面字符出现n次
{n,N) 匹配前面字符至少出现n次
\n,m} 匹配前面字符出现n~m次

一些举例:

1.1 *符号

*”符号用于匹配前面一个普通字符的0次或多次重复,如:
-----
hel*o
-----*”符号前面的普通字符是l,*字符就表示匹配l字符0次或多次,如字符串helo、hello、hellllllo 都可以由 hel*o来表示。

1.2 “.”符号


点号“. ”用于匹配任意一个字符,如:
-----
..73.
-----
由于“. ”符号只能匹配一个字符,因此,上述字符串表示前面三个字符为任意字符,第4和第5个字符是73,最后一个字符为任意字符,如xcb738、4J973U 都能匹配上述字符串。值得注意的是,"."符号可以匹配一个空格,因此, xb738、ui73e 也能匹配上述字符串。

1.3 “^”符号

^”符号用于匹配行首,表示行首的字符是“^”字符后面的那个字符,如:
-----
^cloud
-----
这表示匹配以cloud开头的行。结合上面介绍的“*”符号和“. ”符号,再举一个例子:
-----
^.X86*
-----
该字符串表示行首的三个字符为任意字符(可以是空格),46个字符为 X86,7个字符开始可以重复匹配6,如:866X86666、86X86  都可以匹配上述字符串。

1.4 “$”符号

$符号匹配行尾,$符号放在匹配字符之后,与“A”符号的功能和用法都相反,如:
-----
micky$
-----
该正则表达式表示匹配以micky 结尾的所有行。 一个特殊的正则表达式是匹配所有空行的表达式,为:
-----
^$
-----
该正则表达式既匹配行首,又匹配行尾,中间没有任何字符,因此,为空行。
如果需要匹配只包含一个字符的行,如下面的例3-7所示:
-----
^.$
-----

1.5 “[]”符号

方括号[]匹配字符集合,该符号支持穷举方法列出字符集合的所有元素,也支持使用“- ” 符号表示字符集合范围,表明字符集合范围从" "左边字符开始,到“   ”右边字符结束。举例
-----
[0123456789]   --任意字符
[0-9]   --任意字符
[a-z]   #所有小写字母
[A-Z]   #所有大写字母
[b-p]   #小写字母b~p
[^b-d]  #^表示取反,即除了字母b~p之外的字母。
[A-Za-z][A-Za-z]*    #匹配所有的英文单词
-----

1.6 “\”符号

“\”符号是转义符,用于屏蔽一个元字符的特殊意义,即以字面含义来解释“\”符号后 面的元字符,如:
-----
\.
-----
反斜杠后面的字符“."是元字符,经过转义后,“. ”不再表示任意一个字符,而是一个 普通字符句号“. ”。转义符“\”是引用符的一种


1.7 “<>”符号

“\<>”符号是精确匹配符号,该符号利用“\”符号屏蔽“◇”符号,如:
-----
\<the\>
-----
该正则表达式精确匹配the这个单词,而不匹配包含 the字符的单词,如 them、there、another等。

1.8 “{}”符号

“\{\}”系列符号与“*”符号类似,都是表示前一个字符的重复。但是,“*”符号表示 重复0次或任意次,而“\{\}”系列符号可以指定重复次数,“\{\}”系列符号包括以下三种 形式。
●  \{n\}: 匹配前面字符出现n 次。
● \{n,\}: 匹配前面字符至少出现n 次。
● \{n,m\}: 匹配前面字符出现n~m 次。
举例:
-----
O\{3\}B      #重复字符03次
JO\{3,\}B    #重复字符o 至少3次
JO\{3,6\}B   #重复字符03~6次
[a-z]\{5\}  #表示精确匹配5个小写英文字母,比如 hello、house等。
-----
JO\{3\}B表示重复字符03次,匹配值为: JOOOB。
JO\{3,\}B 表示重复字符O 至少3次, JOOOB、JOOOOB、JOOOOOB等字符串都可由该正则表达式来匹配。
JO\{3,6\}B 表示重复字符O至少3次,至多6次, JOOOB、JOOOOOOB 等字符串都满足,但是JOOB、JOOO000OB等字符串就不满足。

2 正则表达式扩展

符 号 意 义
? 匹配0个或1个在其之前的那个普通字符
+ 匹配1个或多个在其之前的那个普通字符
0 表示一个字符集合或用在expr中
I 表示“或”,匹配一组可选的字符

2.1 “?”符号

匹配"?"符号之前的那个字符0次或1次,如:
-----
JO?B
-----
该表达式表示匹配O 字符0次或1次,即匹配JOB 或JOOB。 需要注意的是,“?”字符
至多可以匹配1个字符。

2.2 “+”符号

与“*"符号类似,都是匹配其前面的那个字符多次,但是,“*”符号可以匹配0次,而 “+”符号至少匹配1次,如:
-----
S+EU
-----
该表达式表示匹配S1 次或任意次, SSEU、SSSSEU 等字符串都可由该表达式进行匹配, 而SEU 却不能由S+EU 来匹配。

2.3“()”符合和“ | ”符号

()”符号通常与“I”符号结合使用,表示一组可选字符的集合,如:
-----
re(a|e|o)d
-----
该表达式中的(a|e|o)表示在字符 a、e和 o 中选择任意一个字符,即 read、reed、reod 都 可由该表达式进行匹配。
事实上,()符号很少使用到,因为“[]”符号完全能够替代“()”符号表示一组可选字符 的集合, re(alelo)d 就等价于 re[aeo]d。
“ | ”符号也可以表示多个正则表达式的“或”关系,基本格式为:
-----
RE1 | RE2 | RE31 |...
-----
上述格式中, RE1、RE2 和 RE3 表示正则表达式。
“|”符号在扩展的正则表达式中表示“或”意义,遗憾的是, “|”符号的这种用法却很少 被人记住,“|”符号最著名的是其管道符用法.

3 通配(Globbing)

bash Shell 可以使用正则表达式中的一些元字符实现通配 (Globbing) 功能,通配是把一个包含通配符的非具体文件名扩展存储在计算机、服务器或者网络上的一批具体文件名的过程。

最常用的通配符包括正则表达式元字 符:?、、[]、{}、^等。这些元字符在通配中的意义与正则表达式中的意义不完全一致, 符号不再表示其前面字符的重复,而是表示任意位的任意字符,?字符表示一个任意字符, A 符号在通配中不代表行首,而是代表取反。

ls -l [a-h]*.awk
ls -l  {[a-h]*.awk,0?.pem}      #满足[a-h]*.awk 或0?.pem 的所有文件

黑客输入包含通配符的文件名故意让服务器重复和连续不断地进行通配 可能引起的拒绝服务攻击。因此,大型服务器经常通过限制服务器执行通配功能的次数、限 制一个具体用户每次输入的通配符或者如果通配符太普通,则拒绝执行通配等方法来提高服 务器的安全性。文章来源地址https://www.toymoban.com/news/detail-600866.html

到了这里,关于Linux Shell 脚本编程学习之【第3章 正则表达式 (第一部分)】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Linux——Shell脚本编程(1)

    1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。 2)对于 JavaEE 和 Python 程序员来说,工作的需要,要求你编写一些 Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。 3) 对于大数据程序员来说,需要编写Shell程序来管

    2024年02月09日
    浏览(47)
  • Linux实验4 shell脚本编程基础

    1.假设在/tmp下有以当前用户的帐号命名的目录,请在命令行中临时修改环境变量PATH的值,要求该目录的路径附加到该变量的最后。 2.请在命令行中临时设置命令输入提示行格式为:“当前系统时间-用户#”。 3.在命令行定义一个字符串变量str,并且赋值为“test for shell”,然

    2024年04月17日
    浏览(40)
  • Linux_5_Shell脚本编程

    程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结构: 数据在计算机中的类型和组织方式 面向过程语言 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理 问题规模小,可以步骤化,按部

    2024年02月13日
    浏览(34)
  • Linux系统Shell脚本编程之条件语句

    Shell 环境根据命令执行后的返回状态值 \\\" $? \\\" 来判断是否执行成功,当返回值为0时表示成功,否则表示失败或异常(非0值)。 使用专门的测试工具 test 命令,可以对特定条件进行测试,并根据返回值(值为0)来判断是否成立。 test命令格式 文件测试指的是根据给定的路径名

    2024年01月25日
    浏览(59)
  • 【Linux命令行与Shell脚本编程】第十六章 Shell函数

    脚本函数基础 函数返回值 在函数中使用变量 数组变量和函数 函数递归 创建库 在命令行中使用函数 可以将shell脚本代码放入函数中封装起来,这样就能在脚本的任意位置多次使用. 函数是一个脚本代码块,可以并在脚本中的任何位置重用它。当需要在脚本中使用该代码块时

    2024年02月14日
    浏览(41)
  • 3.7 Linux shell脚本编程(分支语句、循环语句)

    目录 分支语句(对标C语言中的if) 多路分支语句(对标C语言中的swich case) 分支语句(对标C语言中的if) 语法结构:          if    表达式                  then  命令表          fi     如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。

    2024年02月02日
    浏览(36)
  • Linux shell编程学习笔记29:shell自带的 脚本调试 选项

    Linux shell脚本的调试方法比较多,上次我们探讨和测试了shell内建命令set所提供的一些调试选项,其实 shell 本身也提供了一些调试选项。我们以bash为例来看看。 purleEndurer @ csdn ~ $ bash --help GNU bash, version 4.2.46(2)-release-(x86_64-redhat-linux-gnu) Usage:  bash [GNU long option] [option] ...      

    2024年02月04日
    浏览(40)
  • 【Linux命令行与Shell脚本编程】第十四章,呈现数据

    第十四章 呈现数据 1.1,标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.1.1,STDIN 标准输入 1.1.2,STDOUT 标准输出 1.1.3,STDERR 错误输出 1.2,重定向错误 1.2.1.只重定向错误 n 1.2.2.重定向错误消息和正常输出 2.1,临时重定向 2.2,永久重定向 exec 4

    2023年04月25日
    浏览(30)
  • linux|shell编程|shell脚本内的加减乘除运算实现示例

    shell脚本内的加减乘除是由于在编写kubernetes巡检脚本的时候,某些部分需要做一点简单的运算,突然发现我其实对这些不太熟悉。 因此,查阅了一些资料,现在就加减乘除运算在shell脚本内如何应用做一个简单的总结,写的不对的地方请各位轻点喷 首先,我们看一个错误的示

    2024年02月17日
    浏览(36)
  • Linux shell编程学习笔记14:编写和运行第一个shell脚本hello world!

     * 20231020 写这篇博文断断续续花了好几天,为了说明不同shell在执行同一脚本文件时的差别,我分别在csdn提供线上Linux环境 (使用的shell是zsh)和自己的电脑上(使用的shell是bash)做测试。功夫不负有心人,在其中一些实例中可以体现出zsh和bash的对脚本文件支持的差别,收

    2024年02月07日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包