一、概念
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地址。