欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Shell正则表达式

程序员文章站 2022-05-01 09:47:11
shell函数(使脚本看起来更加简洁) 传参就用$1 定义函数格式: 第一种格式: 第二种格式: fuction ()可以省略,但二者必有其一。 引用函数直接输入函数名就可以引用。 正则表达式(匹配的时候加””) 正则是做什么用的,就是匹配要符合你预期要求的字符串。 通配符与正则的区别 awk gr ......

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,可以做分组,但不调用。