00:00
大家好,欢迎大家继续收看上硅谷的云计算课程,我是沈超老师。那这节课呢,我们继续来讲命令,那这节课我们学习一个叫做grape。我为什么把它写成是补充命令各位这个东西呢。其实是一个典型的Sha尔编程的内容,是Sha尔当中文本三剑客当中之一,是做文本处理用的,那这个东西呢,但是它跟这个范的有很多相似的地方,再一个这是一个非常常见的命令。我们在讲事之前,Gra命令我们就需要多次用到,所以我提前讲一下,我们到后面到讲事的时候可能就提一句,这事讲过了就结束了啊,那gra是干嘛的呢?各位graph呢?是在文件当中提取搜索匹配的字符串。首先啊,这里啊,我们说find也是搜索,也是搜索啊,它的区别呢,Find,我们说find的命令用于在系统中搜索符合条件的文件名。
01:04
而格命令用于在文件中搜索符合条件字符串,你看清楚这两个有区别吧?Find是搜文件名的。搜的是字符串,也就是文件里的数据的。那各位我们试一下,那我们在这里,我我在ABC里,我写了点儿数据啊,我写了点儿数据,那我们就干嘛要搜什么,比如说我在ABC里搜123。来。我为了区分,我把这个字串打上双引号啊。各位,呃,它是这样的。呃,这个字符串如果没有空格的话,打不打双引号都可以,但是如果有空格,比如说你要搜ABC123,这个就必须有双引号,那为了区分啊,我把它打成双引号,这是字符串,这是文件名,在文件名里面搜索字符串,哎,这就是。的作用,看搜到的内容是不是都有123。对吧,好,但是啊,这个命令本身很简单,本身是很简单的,那么呃。
02:07
如果是加了杠A,就忽略大小写了,就大写的AB,这个ABC也能找到,如果是杠N,就输出行号,那我们可以试一下杠N。哎,有人说老师这行号怎么不挨着,哎,啥意思,他的意思是这个文件在原始文件里是第三行,就是说这个是第三行,看见了吧,看见吧,所以它显示的是原始文件里的行号,可以啊,再一个可以干嘛,杠位取反。取散的意思就是我搜123对吧,那如果不加杠V,找的就是含有123的行,加了杠V就是找不含12C的行,123的行。那还有一个选项,这个选项我们有可能会常用,叫什么杠杠,Color等于auto,我们试试啊。等于A。各位,这里面会把你搜索出来的内容,跟你匹配的内容用红色显示,能够方便你能确认你到底是干什么。
03:06
哎,那但是每次敲命令都要敲这么长,很麻烦对吧?我们前面是不是说了别名LL,我们后边再再讲一下啊,这个东西我们可以自己手工建立界面,那暂时先这样,那这是gra的基本用法,非常简单对吧?答案是这个是我们这一章节第三个难点,其实我们前面一直说第二个难点,一直说犯的命令难,其实前面你虽然发现find命令很复杂,它的选项众多。但是呢,其实好像也没有难到让你不能不不能理解或者不能接受的地方,那是由于我们还没开始讲。各位,这个地方可能就是范德和gra的区别,这里是一个重大的难点,那我们来试试,什么意思啊,你来看一件事,我是犯的是找文件名的,那我现在问你,我搜ABC又find的搜ABC,我能不能找到abcd。
04:03
也就是说,我搜ABC,能不能找到包含ABC的数据?这个我们前面演示过了,是不能的。对吧,但是我们来看看graph。我们搜123在AB,在这个文件里ABC里找数据,我能不能找到包含有123的数据,我整个行里面好像就没有纯一二三的数据,我是不是只有123啊,我我把它重写一下,我里面加一行专门的123,就单独的123,单独的ABC好。那这样的话你看啊。我就问你啊,我找123,我能不能找到含有123的文件啊,这个数据能吧,各位,这两个有明显的区别。犯的是我找谁他就只能找到谁,还有是不会列出了,我把这种匹配方式叫做完全匹配。叫做完全匹配。
05:02
它是完全匹配的,OK,其次呢,在graph当中,如果我搜123,它会出搜索出来含有123的数据,我把这种匹配叫做包含匹配。两个明显不一样吧,那各位这里有一个大问题在于是吧。它不是范和grape的区别是完全完全匹配和包含匹配,而是什么看我重新这句话,我我其实说我们很少建议讲师在讲课的时候去照着念文档,如果我要你要念文档,我说。我自己都认字,我何必还要请你讲课呢,对不对?但是像这样的重点概念我要念一下。泛滥命令是用于在系统中搜索符合条件的文件名的。如果需要模糊匹配,使用通配符进行匹配,通配符是完全匹配。而L呢,是用于在文件中搜索符合条件字符串,如果需要模糊查询,它是使用正则表达式进行查询,而正则是包含匹配。
06:10
各位,你看清楚,完全匹配和正这个包含匹配的规则其实不是由于范和grape的区别造成的,而是由于通配符和正则的区别造成的。各位,这里就会出现一个大问题是吗?正则表达式对任何编程工程师来讲,它在初学的时候都是难点,难点之一吧。哎,初学程序的时候,其实有几个最难的地方,一个就是什么循环,循环很多学员搞不清楚,包括其实包括我,我如果你要三层循环嵌套,再超过我,我也就晕了,因为人是活在三维空间的,三个循环套还行,再多就死了。那。再一个呢,就是正则,再一个就是面向对象的概念,这个东西反正都不是太好理解,那换句话说,正则其实是典型的编程内典成的典型的编程内容,为什么要有正则呢?原因写这个这个呃文写这个呃编程的时候,他是不是也需要在这个文本里的数据字符串进行一些模糊匹配,对不对,你记得吗?
07:20
你上网要求你注册,输入你的身份证号,输入你的手机号,你乱输,因为他是不是过不去了,他说你输了不合法原因那其实就是靠正则来进行模糊匹配的。哎,所以对编程来讲,尤其是对前端编程来讲,正则是非常常见的。而且它又是一个很难的东西,对编程工程师来讲,搞不清正则的也是大有人在,但是对我们,首先我们是运维工程师,我一直在说运维思想和编程思想其实差别很大,所以编程入门的人其实很难掌握运维,而运维入门的人学编程其实也很痛苦。
08:00
那所以呢?我们在接触正则的时候,今天可能会觉得异常的懵逼,一头的雾水。而且我们更可恶在于。编程,它只需要考虑政策。而不需要考虑通配符,因为正则是匹配字符串的,而编程的时候一般只会操作字符串文本里的数据,也就是字符串,它不会去操作文件名。而通配符是匹配文件名的,所以绝大多数的语言当中是不需要考虑通配符的,它不需要匹配文件名。但是我们不行,我们是系统,我们既需要匹配文件名称,又需要匹配这个字符创,所以我们既需要学习通背符,也需要学习政策,这个事儿就不恶心了。这个事儿就恶性了。格外格外。正则我们会放在事儿当中,详细来讲,今天我们主要讲的是通配符,但是正则我也会提几个,为啥我要跟他对比,也就是说通配符语里边的符号,有部分符号和正则是重叠的,但是功能和含义完全不同。
09:13
所以我们今天主要学的是托佩符正则,后面学12编程的时候我们还会再讲。到时候再讲,那今天呢,正则只是大家有个概念就行好了,那首先。我们来看看通配符各位通配符相对简单,其实整体上说就这仨符号,下面这两个只不过是它的变形而已。那同区别在于星号代表任意,代表任意一个内容匹配零个或任意多个任是任意多个任意字符其实就是匹配任意内容。那啥意思,你看啊,我们来find的首先啊,搜文件名的时候才会用到托配符对吧,那我们刚刚看啊,我们刚刚find的找文件名找ABC是没有找到abcd啊,那要想找到ABABCD怎么办?加个双引号,在ABC后面加个星。
10:06
这里的星号的意思代表任意内容,ABC后面放什么都可以找到,当然不放也行,就是没有内容,任意内容吗?我说了看就是零个是不是也行?任意多个的任意字符也行,这个绕口啊,其实我就说编程,就是为什么说有时候说运维工程师很难接触编程,编程有时候就抠字眼,一个字都或另外一个字都不一样,那我们就说,那你就可以看到他,就可以找到ABC和abcd了,你还记得吗?我们前段时间清空探目录。在后边加的这个信号,其实这个星号就是通位符,代表任意内容,就代表清空的,是不是看不下任意内容,换句话说。不光是犯的那边。支持同。你只要是操作文件名或者目录名的命令,它都可以使用同命符,比如说删除命令。OK,这是星号的作用。
11:01
那问号呢,代表的是任意一个内容,啥意思?那我看我这里,我把这些干扰项删一下,要不然做起来看起来更不痛快,把大写的还有这个test都删掉。行,那我在这里再创建一个A。这个CC文件,我现在这里是不是有ABC和ACC啊,那我想要找这两个文件怎么办?我就可以干嘛杠内幕。记得啊,用通配符的话,你这个最好文件就用双引号括起来,否则有些通配符它不识别,那问号C看懂了吗。这里的问号就代表任意一个内容。各位,这里的问号代表任意一个内容,也就是说它能找到ABC,也能找到AC,会撤。看到了,那我问你一件事啊,我如果创建一个叫AC的。我现在这里有ABCACC,还有AC,我问你,我这条命令能不能找到AC?
12:03
能不能找到这个文件。各位,答案是不行,原因这是任意一个内容,如果是一个就必须有一个,没有就不行,你可以看啊,星号的意思是任意内容匹配任意内容,其实我未来怕你看不懂,我专门注一句,匹配零个或者任意多个。就是想告诉你这个东西是可以匹配空的,而这个呢,就只能匹配一个字符,好,这是通配符里的这两个标准符号,还有一个就是中括号,中括号的意思是匹配中括号内的一个字符,首先小心一个中括号只能匹配一个字符。但是它匹配的跟问号不一样,问号是任意符号都行,中括号呢,它的意思是你中括号里面写啥,它匹配啥,比如说你写个中括号ABC,它代表的就是要不然是A,要不然是B,要不然是C,那也就是说我可以这样写,看到范的。
13:00
把A后边写B或者C看到了,也就是说他要不然匹配的是A。B。C,要不然匹配的就是AC,哎,这里面是不是就是一个符号的代表,但是和问号的代区别在于问号是可以任意其他符号都行,中括号就只能是你规定的这几个符号来,这样写来也可以找到。其四,中括号可以这样写,用斜杠来代表,好吧,可以这样写。用A到Z代表任意一个小写字母,然后呢,可以用零到九。代表任意一个数字,还可以这样写。A大写的A到大写的Z。然后小写的A到小写的Z连着写。叉代表的是任意一个字母。小先啊,我们其他的语言,比如说PP,比如说Java,它都识别大写A到小写的Z,它就代表任意字母,不用再像我们这么麻烦,但是事不行,SH必须要写清楚,这个SH的语法比较笨啊,大家小心这个事儿,那这就代表这个呀,写法就代表这个,不行,这是其他语言的格式啊,我们就是这个格式。
14:14
那这个呢,代表的就是任意符号,任意字母。大写也行,小写也行,大写要写在前面,大家别忘了原因在阿斯卡玛表当中,大写字母在小写字母的前面,这是有规定的啊,有要求的,那这就是减号的作用,它可以代表一个范围。其次,在中括号内可以加尖角号,代表取反。哎,也就是说,要不然是就是说如果本来是零到九代表的是任意数字,那如果加个尖角号就代表任意非数字啊,那我们可以试试啊,在这里我们可以看,比如说我现在这样搜。它是不是找的是ABC,那在B的前面加个先角号就代表找不是中间这个字母不是B的文件,那是不是就只有CCC了,对吧?哎,这个代表取散的意思啊。
15:03
Good。通配符相对来说还是比较简单的。而所以我们说这东西我们讲完之后,这事就可能不再提了,中通配符就结束了,你记住了啊,通配符是用于匹配文件名的,它是用于完全匹配的,OK,别忘了这个事儿可以。那回来我们看看症状啊,要了命了,可以发现。正则的符号部分和它是一样的。但是它的含义就完全不一样,中括号的作用一样,主要还是这两个家伙就作用完全不同。那我们看看在通配符当中的星号代表匹配认定内容。而在正则当中的型号代表前一个字符重复任意多次,零次或者任意多次。什么意思?我们举个例子试试。那好了,各位。匹配正则就不能使用find命令,Find搜的是文件名,那我们是不是要用?
16:05
那我们来这里搜一下,我搜个A星,在ABC里,我搜这个文件的内容。来,我问会搜到什么内容?在正则当中,星号的作用是前一个字符匹配任意多次。那好,A星会搜到什么内容?我给你几个选择啊,一个选择。匹配的是A开头的文件,只要是A开头的这个这个号都会列出。第二个选择是含有A了。只要含有A的行,就会列出第三个选择匹配任意内容,匹配所有内容,包括空白行,包括空白行选哪个?各位这里学的最不好的学员会选一。各位,我再说啊,这是由于你根本没听懂什么叫包含匹配,在正则当中只写这样的,写跟开头无关,它是含有就会列出,学的稍微好点的,能理解包含匹配的可能会选这个,但是我说答案是三。
17:11
这样写没有意义。不光是A星没有意义,在星号前面写任何符号,比如说B星、C星都没有意义,单写一个符号加一个星都没有意义。原因我们说它的作用是匹配前一个字符重复任意多次,或者说重复零次到任意多次。那各位,什么叫零次?零次是不是就代表这俩符号啥都没有?而啥都没有,是不是就是空啊?那正则又是含有匹配,就是说只要含有空,它就列出,那我问你这是不是所有的行都可以证明含有空,甚至包括空白行,所以。任何正则,你前面单独加一个字符,加个姓,他什么都找不到,列出了所有都是整篇文档下的所有内容。看到了正则当中的星号的作用,那如果真要是想要找到含有A的哈,各位看。
18:04
两个A,首先前面是不是有一个A。后面呢,A是不是重复任意多次。对吧,这个时候这条命令的作用就是查找到含有A的,不含A的就不就没有了,看到了。但是它和开头也无关,因为我再说。正则是含牛匹配。包含聚会约束。所以跟它开不开头没关系,而不像通配符,看通配符我们搜索的时候,如果搜是A开头,它就是A开头,因为它是完全匹配,你A前面没有符号,它就按照A前面没符号来搜索,这就是完全匹配和包含匹配的区别。那各位,那如果要是真要想在。这个正则当中去匹配开头的内容,在正则中就需要加限位符。限,限制的限。
19:01
现未服。各位,什么叫限位符?就是说我要限制它,按照我的这个格式来走,比如说在这里,在正则中,先角号上间角号就是线位符,它代表行首。这个线将上尖角号代表的可是行首,小心啊,在中括号内的上尖角号代表取反逻辑,非这俩作用一样。但是在中括号外的内容可代表行首,懵逼了吧?我跟你讲,编程就这样,它就是抠这个小符号,在不同的位置上,符号的含义都不一样,同一个符号。没有道理好讲,死记硬背,那在我们这在正则中间角号上间角号在括号外的三角上间角号就代表好手,那也就说看这里他的意思是匹配。行首是A。
20:00
后面是A,重复任意多次。没错吧,那我们就可以发现他找到了,就是你了。没错吧,这这时候我问你一件事啊,我问你。我如果这里不写A型号,我光写上千角线这个A这两个有区别吗?匹配出来的内容。各位没有区别啊,同样匹配的都是A开头。那有人说老师那为什么还要加这个星号啊,在这种情况下看换一个做法,比如说我们清下屏啊,我们。CRAABC的内容看,然后看我这里是不是会有多个重复的。对吧。这种情况下,我们这样搜你看啊才有意义啊看。注意我要一个A2个A,如果这样搜,看这样搜。就是最少有还有两个人。对吧,那这种情况下,那我们。
21:00
我们才能找出里面的内容。看到了。那这种情况下我就说啊,如果像刚刚这样写,就是我只是搜索包含有A的行,那后面加不加,再加个这个星,其实区别不大,所以我函数它就是含有匹配,OK,但是如果我要搜多个连续的A,这种情况下我可能就要写三个A以上才能才有意义,才能找到,就是它的意思就是什么,最少有两个A,或者重复无数次A都可以,对吧?好。这是星号的基本作用啊,顺带我们也说了一下上减减号星号的作用。其次问号,问号便代表匹配前一个字符重复零次或零次,把它拆开了,这个是零次到多次,那也就说看啊。那这个时候我们这样做。把这个星换成问号,我其实这里面是有看有5A和两个A的。对吧,那这样搜的话,我能找到谁看,首先必须有两个连续的对吧,其次或者有一个A。
22:06
或者一个A都没有,那是不是就是下面这行有,但是上面这行后面还有三个A,那这个就找不着了,所以它是不是就。好一个都没找到。不对,原因啊,不是原因啊,各位啊,这是我们事的问题啊,不对,原因。12当中认为问号是扩展正则。扩展。啊。Sha尔很讨厌啊。Sha尔认为问号这么复杂的政策在事尔当中根本就用不着,所以Sha尔分为了标准政策。和扩展正则两种标准政策,就是常见的这些星号啊,中括号啊,他都能认识。包括尖角号啊,行首刀号行尾他都认识,但是问号他认为这个家伙太复杂了,我们上根本用不着这么复杂了,所以他必须要使用一个叫做E格F的命令啊,就刚刚这条命令,把它换成E格F,它才能识别,才能找到。
23:05
那这里看啊,我找两个A对吧。那这里应该说只有三个A,或者有零个A,是不是从那找到这块,是不是就是说这个问号代表的是重复零四,那是不是就代表三个A或者重复零四,它是不是就两个A,那为什么还是找到这个了?原因包含匹配。也就是说,我问你五个A,还有两个A吗?答案是含有的。五个A是不是比两个A多,所以这样搜依然会把这个找到,那怎么办?我想把五个A排除掉,我就想要两个A,那怎么办?这个时候就需要加相对符,前面加个符号三,后面加个B,也就说在符号数字三和B之间。只有两个A或者是3A。他才能找到,这个时候才能正确看出,始终记得正则是含有脾胃。
24:03
那五个A是包含有这种情况的,那所以左右两侧是要有限位符的,包括限位符,包括你自己的,就是跟它不匹配的其他符号。也包括什么长首或者行尾这样的符号,OK,那这是问号的作用,前一个字符匹配任意多次,这里小心啊,这个命令只能用根据命令才能识别啊,原因啊,这个是。扩展政策在12里,好,大家注意这个事儿啊,那中括号的作用就一样了,匹配的是中括号里的一个数字,然后呢。先角号是行,首刀号是行。这两个都是用来做什么?做模糊匹配啊,做这个线内符的,那比如说我们可以干嘛,这里再做一下例子。ABC,我们再举个例子,比如说数字结尾对吧,那我们就可以干嘛。
25:01
这个零到九任意一个数字,然后必须是拿数字结尾在ABC当中,哎,这样的话是不是就可以排除其他的对吧?这都是做线位符了。各位,前面这种也是限位符,限位符可以是我们的这样的尖角号或者刀勒号,正则也可以是,也可以是你文本里的字符串。啊,各位,有人说老师你这既然这样写了这么复杂,你还不如直接写123ABCAABC不就完了吗?哎,我只是举个例子,在特定情况下,有可能它不止这一个,还是有特殊情况需要你搜,但是如果有干扰项,就必须有纤维素,好吧,各位。懵逼了吗?懵了吧?各位,我甚至跟你讲。这不是你们的原因。这其实根本原因是编程思想和人类思想的区别。通配符是运维思想,所以你们其实觉得运通背符可能还好理解一点,而正则其实就会更加痛苦。原因。
26:06
这确实是典型的编程内容,而且在编程中也是较难的内容。各位,其实我们也培训过编程工程师啊,这个呃,这种新实工程师居多,其实经常性的到班里头去问,我们因为讲课的时候会用到这东西,经常就问,哎,你们学过正则吗?全班说学过了,然后问正则当中的星号是什么意思啊?全班异口同声的告诉我匹配任意内容,好气的嘴都歪了。你可搞清楚啊,匹配认定内容是通配符的作用啊,正则的作用是前一个字符重复任意多次啊,可搞清楚啊,它的作用和含义是完全不同,完全不一样那。再说一遍,政策是干嘛的?其实就是我说的,你写网站经常有用户要求你输入这个手机号邮箱,那你乱输一通的手机号是有明显的规范的,比如说必须一开头。
27:00
第二个数呢,是从二到九,没有幺零开头的,手机号幺幺开头的在幺二少,但是有二到九开头后面的九个数,总共11位数,后面九个数是零到九,这个就可以很方便的拿正则来过滤。当然,正则只能做错略。也就是说我只能过滤这种非常规范的这种大的范围,比如说11个字符一一或者。一开头,然后第二个数是二到九这行,换句话说你数着位数,你乱编,他是判断不了的。除非他跟这个营业厅,电信营业厅来联网,当然真要靠电信和这个网通电信联网的话,你的这个手机号它就不是通过正则来判断了,那就得通过程序来判断。那有人说老师正则也行,程序也行,那为啥不通过程序啊,简单。正则判断是文本判断,它消耗的资源小,它的这个知识的访问人数这个大,所以我们一般都推荐你写的东西先用正则过滤一遍,粗了,然后呢可以,如果你觉得可以用了,你就把正则过滤完全用,如果觉得用完不行,你还可以再拿程序再过滤,程序过滤就会更精细。
28:13
OK,所以编程的时候,正则也是必备。而我们呢,对我们呢,我们后面要写的大量的程序,其实也需要利用大量的政策。但是我们不会推荐你用太复杂的正则,所以其实还是就是你把这些常见的正则符号搞清楚,然后理解清楚什么叫完全匹配,什么叫包含匹配,这可能才是关键点。通配符的完全匹配指的就是一模一样才会列出,而通正则的包含匹配就是只要含有你这一行,里面含有你要搜的内容,它就会列出。这种情况下一定要搞清楚好。我举了一些例子啊,我建议你们也建立这样一个类似的文档,你们也试试,然后慢慢的多练,就能理解这个东西是什么。
29:03
好了,我们这节课呢,讲了格rap同定律,但是格rap同定律不是重点,格rap同定律本身非常简单,其实我们讲了主要是范德和国家福的区别,其实如果归根结底主要讲的是通配符和政策的区别,当然通配服我们这次讲完以后,后边就不讲了,我们后边就直接用了。而正则呢,我们后面还会讲,你牢牢记住,通配符是用来匹配文件名的,它是完全匹配,正则是用来匹配字符串的,它是包含匹配,牢牢记得这个事儿。好,我们这节课的内容就是这样,我们下节课再见。
我来说两句