正则表达式

一、概念

1.定义:正则表达式是一种基础的模式匹配(pattern-matching)技术。

2.模式:将内部数据在结构上抽象为字符串;

    模式指的就是数据结构

3.匹配: List(“A”,”B”,”C”) match{ case List(“A”,_,”C”)  ——> println(“ok”) } ;

    匹配指的就是链表匹配

4.可视化:https://regexper.com/

    这个网站可以将正则表达式变成图形可视化,超强辅助理解!

二、技巧

1.$(( ))、$( )、` `的区别

  (1) $(( )) 中的变量名称,可用于其前面加 $ 符号来替换,也可以不加$

[root@localhost tmp]# a=1; b=2; c=4
[root@localhost tmp]# echo $((a+b*c))
9
[root@localhost tmp]# echo $(($a+$b*$c))
9

  (2) $( )与` `都是用来作命令替换的:先完成里面的命令行,然后将其结果替换出来,再重组成新的命令行。

[root@localhost tmp]# echo today is $(date "+%Y-%m-%d")
today is 2020-04-11
[root@localhost tmp]# echo today is `date "+%Y-%m-%d"`
today is 2020-04-11

  (3)说明:

    1.在多层次的复合替换中,` `必须要额外的跳脱处理(反斜线):转义=跳脱=escape,如转义字符—Escape character—ESC

    2.并不是所有的类unix系统都支持$( ),但反引号` `是肯定支持的。

2.[[ $i =~ ^[0-9]+$ ]] && echo 1 什么意思?

  =~ 表示的是匹配

  && 是短路与,前者若为假则不执行后者

  [[ ]] 是if判断使用正则表达式的固定格式

  ^ 是开头,$ 是结尾

  [0-9] 是1个范围内的数字

  + 是匹配前面1到n个

  ^[0-9]+$ 就是:以数字开头并结尾的,整行都是数字。

  整句的意思是:如果变量$i 匹配到了以1到多个数字开头并结尾的,那么就 echo 1

 

3.[^ ]*和[0-9.]*

[root@localhost linux_shell]# ifconfig ens33 | egrep -o "inet [^ ]*" | grep -o "[0-9.]*"
10.0.0.100
[root@localhost linux_shell]# ifconfig ens33 | egrep -o "netmask [^ ]*" | grep -o "[0-9.]*"
255.255.255.0

  [^ ]*表示非空格字符序列  注意^单独地在中括号里面表示“非”,如果在外面则有可能表示“开头”

  [0-9.]*表示点分数字序列  匹配[ ]内数字和点符号中的任意单一字符,*表示匹配多次,可以表示点分数显的IP地址。

原文地址:https://www.cnblogs.com/ytdyz/p/12670948.html