00:00
大家好,欢迎大家继续收看上硅谷的云计算课程,我是沈超老师。那这节课呢,我们开始12章,12编程章节,那我们首先一开始学的第一个内容正则,各位正则其实我们在讲find和grape的时候,其实把一些基本的常见的一些政策说了几个,但是呢,我们这回把它补全啊。那首先先要搞清楚第一件事,正则和通赔的区别。正则是用来匹配。字符串。而通配符是用来匹配文件名称的,大家小心,通配符我们讲过了之后就不再多说了啊,好了,那我们来看看正则各位,其实我们说只要是匹配字符串,那么它都应该识别正则的这种格式,比如说除了gra命令,我们后面还会学习aw k3命令啊,这将我写三个啊,文本文本操作3000个啊,俗称的就是它呢,都是用来支持正则了,而如果使用搜索文件的名称的这些命令,那么它使用的这些命令,LS的这些默认支持的是通配符,哎,默认。
01:08
来好了,那我们大概知道一下,这个其实也是强调过了,不能说大概啊,就说我们应该是知道,我们简单复习一下,那我们来看看正则。各位,我再说。12语言不是一个标准的完整语言,在任何地方都体现出来,所以呢,在其他语言当中,正则不分什么基础正则和扩展正则,正则就是正则,那善认为什么你不会拿正则写太复杂的这种。这种字符串的这种筛选的格式,所以他建议你把它分成了基础正则和扩展正则两种,其他语言没有啊,其他语言就是所有的正则,就包括基础正则和扩展正则,其实都是能直接生效,而我们CH是这样,大多数常见的是基础正则通过graph命令就可以加载。
02:03
而如果是扩展政则需要通过e gra定率e gra定率或者gra杠大E,用它来才能识别扩展政策,OK,所以我们先看到的是基础政策表达式,哎,这是再说啊,这是事儿的特殊情况,只有事儿这么分,不能说只有十,就是其他常见的,所有的其他语言都不会这样,就S这种,就是他是刻意把它简化做成这样的,但是。这种简化其实看起来并不是太成功,为啥学过其他语言的人学我们这个也很痛苦,没学过语言的人其实只要学语言就很痛苦,不论你是不是简单了,那但是我们说啊,确实可能,如果我们大多数情况下基础政策就可以用,就是可以用了啊,好了。那基础正则我们总共有这么多,我们先讲前半部分,后面的东西,我们后半部分再说可以好了,前半部分其实我们多数东西见过一个是星代表匹配前一个字符匹配零次或任意多次,对吧?那为了做这个例子,我写了这样一个测试文档啊,这个文档随便写了几句话,然后呢,其实没什么含义,就是为了测试,那我们说过啊,什么第一件事。
03:18
匹配菱型,A型或者B型任何一个型,这个会出什么?哎,测试文档我写在这儿。写到这了,随便写了几句话,然后呢,呃,也没有什么含义,其实就是想这个做一下测试,那么首先啊,我还有一件事,我为了让你们看的清楚,所以我在加目录下,我的加目录下。我的加目录当中。干嘛加了一行别名,看到了让我的graph可以显示颜色,这个也是讲过的,OK,别名是生效的,目的是为了看的清楚,好,那现在我就说我现在gra,我测查找A型,在测试文档里,那我问你会出现什么内容?
04:03
这个事讲过了,我也不再卖关子,我多说啊,直接说。任何符号后面加星号都没有任何含义,它会匹配所有的内容,包括空白行,都会列出原因。我们说星号的作用代表前一个字符重复零次或任意多次。那重复零次是不是就是为空啊,就啥都没有,那我们整篇文档每一行都可以看作是既有所有的符号,又有什么没有,我不能不能这么说,就每一行看到都可以看到有空字符存在,每一行都有空字符,所以这样写它的作用其实会列出所有内容,当然这里颜色看起来好像是把A列出来了,但是没有意义,你看空白号也列出了,没有A的是不是也列出了?对吧,所以啊。在正则当中,任何符号后面直接加星号是没有任何含义,没有含义OK,所以如果要想用星号,那我们就来干嘛,最少两个月。它代表的就是这一行最少要包含一个A啊,一个A或者任意多个A对吧。
05:05
对吧,所以啊,那我们看这样写就可以了。哎,我们可以看到把多余的行是不是就过滤掉了,这些所有的行里是不是都包含有A这个字符了。对吧。对吧?A,那这就是我们说的多个星号AA星,它的意思是最少包含一个A,一个A或者无数多个A,对吧,好,各位。这个事儿有意见吗?如果对这个正则稍微熟悉一点的学员,我们就会觉得这个事有意见。为啥我们一直在说正则是包含匹配?一直在说这句话,还有是不是就列出,那我现在的目的是不是就找出当前这个文件当中包含有A的,行啊,那我何必要这么麻烦写AA星啊,我问你,我直接写A行不行?在这个文档当中搜索含有A的行可不可以?
06:03
看结果是一模一样的。看到了吗?各位,换句话说,这两个写法是一个意思,都是搜索含有A的行,有一个A也行,有无数多个A也行。都行。那只要含有一个A,只要含有A就行,那这样的话,我们是不是就没有必要再去写A型或者AA型这样写了。各位。如果我们仅仅只是搜索包含有力的,那这种肯定第二种写法是合理的。第一种写法更繁琐,虽然能实现同样的功能,但是更繁琐。但是如果我们有这样的限制,比如说看啊,我故意写了这样几个单词。看到了吧,S后面有一个A,然后ID。有2AID,有三个AID,有吧,就是这样的符号故意写了,把S的单词故意写错了,对吧,说这个单词故意写错了,那我现在问你,我现在就要搜在S中间有两个A的符号。
07:14
或者说我们要搜两个以上啊,说搜两个A还不行啊,就搜两个以上,我既要有saa I,也要搜saa I,但是我不想搜Sai,我就想确认,我就要把前面这个排除,我就要搜后面两个。这个时候单写一个A就没有意义了,那这个时候啊,左边这个S和右边这个I,我们就可以看成是限位符了,就是它的限制符号,限制符。用来确认在你S和I中间必须要用A,那这个时候看着我现在就得这样写,看S后面有任意多个A,一个A,或者最少要有不最少有两个A,然后再进。看到了。在这个test各对我最少要有2A。
08:04
当然再多的A也行,因为A代表A星,代表了是前面这个A重复零次或者任意多次对吧?那A这个A星前面还有两个A,那就是说他最少要有两个A,后面可以有无数个A。两个A也行,就重复零次也行,重复无数个A也行,那也就说我需要搜的是包含S和I之间有两个或者两个以上A的才会列出,只有一个A的不行,那这个时候看啊,别撤,我搜到了吧,两个A。三个是不是都找了?对吧,但如果这里啊,看我只写的是saaid,那这个就写死了,它就只能找到中间有两个A,而有三个A就不行了。那这种情况下,就说左右两侧有限位符的时,尤其是后面右边有限位符的时候,这个字母加星号代表重复认识多字就会有含义,就会有作用。
09:00
能看到吗?而前面这个如果没有线位符,你写AA星和写搜索A是一个作用。看懂了啊,换换句话说,如果我只想帮这个让这个搜索含有字符串的这个行,那么不需要写这个信号,直接写字符串就行了,除非。有特定的限位符,除非有特定限位符,我比如说我要搜S和I之间有两个A3个A5个A10位,这种情况下就必须要有信号存在,看明白了没有限位符的话可以不写信,哎,那这个是最常见的,比如说我们在这个啊。在password里去搜索一下含有root的行对吧,不需要再加个星了,就直接干嘛root,然后直接回车就可以了,对吧?好,这是星号的使用啊,星号的使用这个啊,那后面这个还写了什么,就最少包含四个A的吧,也有啊,都行,OK,那我们说其实如果不加线位符没有,比如说前面没个S,后面没该,你就没必要写这个AA这个氢了,就直接就是什么写四个A就行了。
10:09
对吧。含有四个A是不是就行对吧,那如果有限位符那就不一样了,好,这是星号的作用啊,我们看一下第一个。匹配等多次,那还有一个就是点。这个我们说过。它的作用是匹配这个任意一个字符匹配。啊,匹配是这个一个字符啊,可以,那我们可以看到啊,我们说。点的作用是匹配任意一个单个字符的啊,匹配单个字符。那我们说啊各位这个跟我们通配符啊,算了,别说通配符,说通配符你更更不用写了,他就是匹配任意一个字符,除了换行符之外的字符啊,那这个时候看我要写什么。
11:02
我想匹配的是在S和D这两个限位符中间有两个任意符号,任何符号都行,那我们就可以这样写了,那我们写什么?呃,先cat一下cat test里面的文件内容,Grape s点点点D,然后呢,Test文档我们可以看到有sadid和户D2个字母,当然这个单词是我故意写错了,随便就是写,就是想告诉你它代表任意一个字符,哎。跟正则当中的问号左右一样,正则中星号代表任意字符,问号代表不是同位符中啊,问号代表任记单位字符,而我们正则里星号代表前一个字符,匹配任意多次问号是扩展正则啊,后面再讲点代表任意一个字符,大家注意这个事儿啊,匹配任意一个字符好,这是。点的作用,那可以使用点心代表匹配所有内容。
12:00
好,那其实我说这是任何符号后面加钱都代表匹配日均,率都代表匹配日均,那么试试标准的写法就应该是点心。甲代表是不是代表这些内容重复任意多次对吧,那这个时候我们可以看到PK所有内容。哎,这里还是有点区别,如果是A型,其实你会看到只有A变成了红色。对吧?而点心呢,就可以找到所有内容,OK,其实作用差不多,没什么太大区别,但是标准写法如果想匹配任意内容,应该是点性,这是正则的写法啊,如果是通配符的话,直接写星号就代表任意内容啊好了。呃,这是点线啊,这是点的作用,代表匹配任意内容,其次匹配尖角号代表行首,拉拉号代表行列,那常见的比如说以大写M开头,以什么东西开头,写减减号上减减号就行,那我们可以看到我们这里是不是有比如说gra。
13:03
大型减角号大M,然后呢,文件test test测试文件,然后呢看大M开头。那这还可以用什么,比如说以这个这个这个什么结尾,其实是要看一下以N结尾还行,就随便找个找个符号以有结尾就行可以啊,那我们可以干嘛?那我们其实看一下test的内容。由en n的,我故意把这个后面没有写标点符号对吧,那我们就可以干嘛找到en n当然结尾了。这个号哎,找到N键对吧,但是啊小心我如果要想起点结尾这个地方需要加一个转移符。来往前翻一下转移符。它代表取消这个特殊符号的特殊含义,变成普通字符串啥意思?我问你啊,如果我想找这个。比如说我就要这样写,你看点结尾对吧,然后在这个里面,哎啊这双引号没括起来。
14:08
哎,那我问你,你觉得会匹配什么?各位,在这里点代表任意一个字符,任意字符结尾,那这个时候就会把空白横排除在外,所有的符号结尾都可以。对吧,不光有点,还有逗号,还有感叹号,甚至还有什么字母结尾都是都有,那所以因为这里星号代表的是任意字符,它只会把空白符给干掉,那我的要求是要求找的是点结尾的,那我就需要把这个点前面加一个转接符。它的作用就是把这个特殊符号。本来点的作用是代表任意单个字符对吧,加了转移符,它就会变成普通字符串点,那这条命令回车就是一点接力了,看到吧。哎,这是以什么结尾?OK,哎,以谁结尾,如果是以特殊符号结尾,比如说我,如果我只是以普通符号结尾,那你直接以谁结尾就写谁,以谁开头就写谁,但如果是以特殊符号结尾,那这个时候比如说第二就要以反转移符结尾,其次可以使用。
15:13
开头加结尾,哎。尖角号是不是代表行首达的符是不是代表行尾,那尖角号和行就是行首和行尾之间啥都没有代表什么,那是不是代表匹配空白号?没错吧,哎,对了,那也就是说我们用这种方法看可以匹配空白行。行首行尾,那么这个时候呢,看我们匹配空白行,那有人说匹配空白行有啥意义,你转过来写格尔,我们讲过了,杠V是不是取反。那。这里是不是就是匹配空白行啊,那取反的话,那是不是就是把空白行去掉,列出不是空白行的行,对吧?各位这个可比这个这个其实也是会匹配到把空白行给干掉,但是这个可是有可能会有歧义的,有可能在其他情况下会有特殊情况,所以标准的排除空白行就是这种方法。
16:09
哎,先找到空白行,再取反,把除了空白行之外的符号列出,哎,所以啊,查找空白行还是有用的,主要是用来取反,用来干嘛去除空白行的,我这篇文档里面其实是有很多空白行的,看明白了,这是标准。就是剔除空白行的方法,最好还是不要用这种方法做。就前面这个直接加点到结尾,就以点结尾,以任意符号结尾,这个有可能在特殊情况下是有特殊有有问题了,所以各位。空白行还是有作用,OK,那这是第四行首和行尾的匹配啊,我们前面看啊,讲了这个点的,讲了星号对吧。讲了星号对吧,啊好了,然后呢,这个呢,建立文本这个就算了,我们已经提前建了,为了节约时间,好,那接下来呢,我们再看一个。
17:06
中括号各位,中括号这个和通配符的作用一样,它代表的是匹配的是中括号中任意一个字符,什么意思啊?看我搜S中括号OA中括号ID,它的意思就是要不然是said。要不然就是soid搜的是这个。OK,那各位我们试试啊,来各位。我们前面其实搜过这样一个东西,你看看啊,我们先搜这个S,然后呢啊中括号啊,或者或者是A或者是O对吧?啊,那这个东西就是匹配中括号里的一个符号,那就不用加这个,不用加这个或者。啊,就是写错了,So,然后ID这是中括号的作用。在test这里来,我们说他就会找到,或者said或者soid对吧,那各位前面其实我们写过这样一个东西干嘛的,比如说我写的是S,后面有俩点,然后ID是不是也可以。
18:14
呃呃,我们啊,一个点一个点。S后面一个角,然后然后是不是也能找到这个。对吧,但是啊,这两个的区别在于啊。区别点是任意符号,那我这个文档里只有saidd和SOID,所以这两个结果一样,但是我问你,我万一还有别的ID呢,比如说PID。啊,那如果是这个,它是不是就三个都能找到,就是任意符号,而如果我写清楚,我只要这两个符号,那是不是可以排除这个。对吧,那看你的需要啊,这两种写法看你的需要啊,看你怎么用,所以你只要知道的是中括号里代表的是首先。每一个中括号会匹配一个字符,但是它和点不一样,点是匹配任意字符,而中括号匹配的是中括号里的任意一个字符,也就是说你中括号里写什么,它才会匹匹配什么,看明白了,好,这是匹配任意一个字母,那这个就是匹配任意一个数字啊,那这个就是匹配任意大写字母,这个就是匹配,哎。
19:20
尖角号行首开头匹配任意行小写字母开头的行,那么试试,那我们看一下这个文档里有什么,哎,有这个数字对吧,那我们就干嘛格坡这个。中括号任意一个数字只要有,我就能找到包含有任意数字的号。在这里,那我们就可以找到它,只要有数字就行,对吧?哎,不一定是开头啊,我我我把这个文档改一下,不一定是开头啊,比如说我这句话后面数字后面再加个几个数字。啊,可以啊。这个可没有开头的意思啊,那我们从来看文档的内容是这样的,那我们找一下看,就只要有数字。
20:06
就行。对吧,而如果我要是以开头呢,就需要在数字的前面或者字母的前面加减九号,这个我们说了是不是代表行首,那我们我们要找的是数字开头的行。哎,这个时候可以看到我们找到了数字开头,那数字结尾了,或者中间还有数字就会被剔除了,对吧,这是数字开头,这个小心啊,这两种写法都没有开头的意思。这个我们一直说正则是包含匹配,含有就会列出,所以我如果写的是在文档中查找任意大写字母,或者查找任意数字,它指的都是含有字母就可以。含有大写字母或者含有数字就行,如果要开头,需要在前面加减角号,注意这个事儿OK,好了,这是我们中括号的作用。
21:00
匹配中括号内任意一个字符,好,其次这个事儿不可行了,你们仔细看一下,我们到这儿啊。除了可以在尖角号之外加行首加尖角号啊,不是在中括号外可以加尖角号。在中括号外加在尖角号,它的意思是开头。那是在中括号内也可以加减角号,这个减角号的意思是取反,取反。也就是说,如果在尖角号里面写的是小写字母,它的意思就是匹配,只要不是小写字母就行,那我试试你看。先不要加中括号外的这个,你看我们就先讲这个,这是不是匹配,包含有数字号,那如果在中括号里面加一个间接号,它的意思是取反,那代表的就是匹配,只要不是数字都会匹配出来看,当然不是数字的行里面也有字母,它也会把这些字母列出。
22:01
对吧,那如果前面这个看,那我们刚刚说了,中括号外面写尖角号代表这个开头,那这里是不是找字母开头的号。那如果是在这里,这里再加一个减点号啥意思。中括号外面的号,尖角号是不是代表行首,那中括号里面是不是代表取反,前面写的是以数字开头,那这个是不是就是以非数字开头就可以,我就列出了,看到了大写的小写字母都行,都可以列出,OK,所以啊,这个还挺恶行。尖角号写在中括号外,代表行首写在中括号内,可代表是除了中括号中的字符以外,字认字符其实就是取反,就代表取反,OK,那我们可以看到我如果这样写就是。开头以非小写字母开头开头以非字母开头这样写,其实说白了,这就是以数字开头。
23:01
对吧,啊,一个意思好,小心这个事儿别搞错了,中国号写在里面是取反,写在外面是扛手开头的意思好。转移符我们讲过了,这个例子我们也说过了一点,结尾的这个这个好对吧,加了转移符点就会变成普通符号,OK,好了各位。正则啊,我再说我们12中的正则其实要比其他语言要少,那而且我们还把正则分了金属正则和和扩展正则。那我们这节课讲了基础正则的前面这一部分啊,好了,星号代表的是前一个字符,匹配任意多次,第二点代表的是任意一个字母。尖角号代表行首刀号代表行尾,中括号代表匹配中括号内的任意一个字符,哎,比如说这样写就代表匹配任意一个原因啊喔呃一无语好那。这样写就代表匹配任意一个数字,哎,然后呢,如果把尖角号写在这个中括号里,它就代表区反,这样写代表匹配任意非数字符,这样写就代表匹配任意非小写字母号,好,然后呢,斜杠代表的是转移符,取消后面的这个符号的特殊含义,好各位,我们这节课正则就先讲这么多啊,剩下的我们下节课节课再见,这节课就这样,下节课再见。
我来说两句