Shell正则表达式
shell函数(使脚本看起来更加简洁)
传参就用$1
定义函数格式:
第一种格式:
fuction 定义的函数名 { 命令 }
第二种格式:
定义的函数名() { 命令 }
fuction ()可以省略,但二者必有其一。
引用函数直接输入函数名就可以引用。
fuction 定义的函数名 { 命令 return 2 }
正则表达式(匹配的时候加””)
正则是做什么用的,就是匹配要符合你预期要求的字符串。
通配符与正则的区别
awk grep sed egrep使用的都是正则
find使用的都是通配符
最容易理解的区别:当你对文件名目录名使用字符时,使用的是通配符,当你对文件里的内容使用字符时,使用的是正则
基础正则
. 匹配任意单个字符(必须存在)
比如l..e匹配到的是 like lone life
但不会匹配到 le ledoasdo lee 因为.代表单个,l..e有两个点,并且这两个字符必须存在,不能为空。
^ 匹配开头
比如 ^ok匹配到的就是会以ok为开头的行,如果其他行有ok这两个字符,是在行首会被匹配到,不在一行之中的行首,哪怕是ok,也不会被匹配到。
$ 匹配结尾
比如 ok$匹配到的就是会以ok为结尾的行,如果其他行有ok这两个字符,是在结尾会被匹配到,不在一行之中的结尾,哪怕是ok,也不会被匹配到。
* 匹配前一个字符的0个或多个
比如 a*b 匹配到的就会是以b结尾的并且含有a的内容。*前面必须要有字符串。
.* 匹配任意长度任意字符
比如.*b 匹配到的就会是以b结尾的任意内容,.*代表任意长度的字符串或字符。
[] 匹配到[]里的所有字符,会把中括号里的所有字符以单个形式匹配出来
比如 [root] 匹配的是只要有r、o、o、t里的任意一个字符都可以匹配到。(跟通配符里的*一个作用)。
[^] 匹配取反,除了中括号里的内容都能匹配到
比如 [^abc]匹配到的内容不会有a、b、c这三个字符,注意是三个字符包括三个字符组合成的字符串。
^[^] 匹配取反的行首,就是把匹配到的字符,并且此字符是在行首,不显示。
比如^[^r] 匹配到的含有r这个字符,并且行首是以r开头的行不显示。
n\{\}匹配花括号前面字符至少n个字符
比如o\{2\} 匹配到的就是含有o这个字符,并且最少含有2个o的内容。
\{n,m\}匹配花括号前面字符至少n个字符,至多m个字符
比如 o\{1,3\} 匹配到的就是含有o这个字符,并且最少含有1个o,最多含有3个o的内容。
\<锚定单词首部
比如\<root>\匹配到的内容就是 root,nloghiroot里的不会被匹配到,这种规定了你匹配的内容前后可以有特殊字符串,可以有空格,但不能是一长串单词中含有这个匹配的内容。
\>锚定单词尾部
()分组\1调用 ()\1 结合使用 调用店面的第一个分组
比如\(root\).*\1 匹配到的就是一行之中含有两个root。
拓展正则
要想支持拓展正则,必须使用egrep或者grep –e
+ 表示其前面字符至少出现一次情况
比如 # + 匹配到的就是含有#和空格的内容,至于有多少空格无所谓,但至少有# 。
? 表示前面的字符出现最多一次的情况,可以是0个
比如 a?b 匹配到的可以是ab、b、abbbbb、bbbb
| 表示匹配竖杠两旁的任意一个
比如 cat|cat 匹配到的是cat还有cat
也可以 (c|c)at 匹配到的也是cat还有cat,可以做分组,但不调用。
上一篇: 早上吃姜胜参汤 晚上吃姜赛砒霜
下一篇: 聊聊 ES6 中的箭头函数