00:00
那接下来呢?赛命令的精华所在,大家注意听了。Set命令也支持搜索替代。也支持搜索替代。那大家可能说搜索替代这个东西。也谈不上什么新奇的玩意儿啊。但是别忘了在支持正则表达式,而在正则表达式中。我们提到。有分组和后项引用,所以我们利用正则表达式配合S就可以实现非常强大的文件的修改。S命令的搜索替代命令,这个写法跟我们前面讲。Vim一样的啊,这个也是S,后面跟上模式,再加上替换的字符串。
01:05
那其中搜索的这个模式呢,可以写正则表达式,正则表达式如果你想。用扩展的正则表达式。那这个地方呢,需要我们加上一个R选项或者杠E。你要不跟R-E,那它默认就是基本正的表达式啊,所以我们在刚才呢,这个地方写的正的表达式也是一样的。好,那用S后面跟上模式搜索替代,当然你也可以加。加GG的话呢,表示全行,如果这一行里面有多个都符合条件的字符串,那默认是只替代第一个。所以呢,你加上G呢,就可以全局替代。哎,T呢,是显示替代成功的好。
02:00
那这个忽略答写我们说过了。这个分隔符呢,也可以用。At井号都也是可以的,那这个S呢,它的强大的地方在于可以用分组,比方说我们曾经给大家说的这个文件啊,这个文件呢,我们想把root这一行。Root包含的字符串。给大家搜索一下。那搜索的时候呢,我们可以把这个你要找的行先标注出来啊,比方说包含root,包含root找到以后,我们想把里面的特定字符串替换了啊,比方说我们想把R点点T替换成。替换成什么呢?替换成换成一个别的符号。
03:01
那如果你直接换的话,那简单这样换就行了。一行里面如果有多个R加点T匹配的符号,那我就全替代。加G,好,当然替代完了以后呢,我们想显示替代成功,那我们来看看默认呢,它确实是显示出来了。看了吗?这行啊,当然现在看的不太清楚,因为它有个自动打印,他把没有关的行也显示出来了,那我们自动打印给它去掉呢,你发现它又不显示了,所以我们再加上一个P,就是只打印出符合条件的行。就是只打印出那个速度,替代完了就好。大家看这个地方是有成功的啊,那事实上我们说过这个搜索替代R点点T。
04:02
那我们如果用R加点T作为搜索替代的条件的话,你看这还有一个R加T。那你看,如果是这样做,我们刚才又多了一行,多了哪一行呢?就是这一行。FTP这行大家观察一下,FTP是不是有这个地方,也是符合条件的,它叫V斜杠FRT对吧,所以我们现在你看这也被替换成了他的命。啊啊。当然,那我们现在就想实现功能,就是前面搜出来的是root,就替换成啊一个我想指定的别的符号,但是里面包含root,那怎么办呢?我们可以用一个这个二符号。这个at的符号表示的就是前面是啥,后面就是啥。前面搜出来的是BT,那这就是Abt,前面是R12312T,那就是12T,当然光搜出来那就相当于没有变了,那我们就给它加个东西,比方说我们加个ER。
05:08
那加了ER呢,就变成了你这是R什么什么T,那么这就变成了R什么什么T。啊。嗯。好,那看看有没有成功,你看是不是变成了R,这个地方也变成了R,什么什么T,当然这个ER你放在后,那你放在前是不是就相当于前面补了一个ER对不对?比方说我们随便写一个啊叫pre,你看这个pre是不是就加到前面去了。看懂了吗,这个。那么用这个方法,它是实现了非常强大的。分组功能。我们这个分组现在就可以用了。因为我们在分组前面讲过,我们可以用分组括号把某一行用分组给它切成多个字段。
06:05
多个字段完了以后呢,将来我们可以用斜杠一,斜杠二分别表示前面第几个分组,那么这样带来的好处就是我们将来用搜索。把这些行先标示出来,替代的时候呢,你就可以写上你要留下来的内容,那这样的话就意味着我们将来把这一行就可以用小括号切成若干段,想留哪个就写哪个数字就行了,因为你替换了,剩下的就不就不要了吗?啊,什么意思呢?是这样的啊,比方说我们就以这个,嗯。这个这个地址吧,啊,比方说我们这有一个这样的一个文件。路径,那这个文件路径呢,我想取它的。机机名和文件夹名。机名呢,就是它的名字,文件夹名不就是它的这个目录吗?啊,那我怎么把它这个机名取出来,怎么把它的目录名取出来,这个怎么取呢?那你就用S来取啊,S取的话呢,我们搜索咔咔咔先写上,当然这个符号这样写容容易和这边的斜杠混了,所以我们就换成井号啊艾呀都可以啊,换成井吧,这回。
07:21
换成井井井,那因为这一行,所以我们前面不用加东西,然后我们现在要想,比方说我们就想把这个取出来。这个取出来就是文件夹名呗,那这个文件夹名怎么标识啊。怎么标识啊,那实际上你就是把这段给它表示出来,那表示出来怎么表示呢。那实际上就是从行首。中间是任意字符串是吧?一直到哪啊一直到这,那问题是这咋表示啊,问题是。啊,咋表示。
08:05
那从这个往前后不好表示,但是从后往前可以好表示吧,比方说我们先把Dollar先写清楚。Dollar不是行尾吗?对吧,先我们从后往前描述这个好好说吧,那像这个呢,斜线可能有也可能没有,因为有的时候我们可能会不写,比方说不写对吧,也可能会写,所以这时候怎么办办呢?那是不是就是我们这个斜线是可有可无的对不对,可有可无,但是这个斜线。我们这样写需不需要转移一下啊,那我们把它做一下转移,就认为这个符号是可有可无。然后前面呢,是非斜杠的其他符号吧,那非斜杠怎么表示负字符斜杠加号一个以上。
09:01
是吧,哎,然后再往前,这是不是又是斜线什么什么了啊,所以那这时候我们就加个斜线,哎,这个斜线它本身在正则表达式里有没有提示斜线的地方是什么什么意思。那就转E是吧,然后再往前是不是就点星。任意字符串。对方。那我们要用扩展的正则表达式E或者R都行,我们用这种方式是不是把我们这个文件的整个路径就描述出来了?那描述出来以后呢,我们再把它切割成我们想要的东西,怎么切割呢?就是我们把它用括号括起来。
10:02
对吧,哎,用括号括起来,然后括号括起来。大家看我有两个小括号啊。第一个小括号是从行首一直到。斜写,然后第二个小括号是。Dollar就是最后一行的前面的非斜线的行。这是不是就匹配了这一段?那匹配完了以后呢,你想要啥,你就斜杠几嘛。斜杠一是不是就是匹配的是第一个分组。那是不是就意味着把第一个分组留下来了?那么第二个分组是不是就都丢了,把它打印一下啊,然后把自动打印关闭。出来了吗?是不是就把文件夹取出来了,那如果我换二。
11:02
留的是不是就是最后这一段?看懂了吗?现在我们是不是就把这个文件一批为二两个小括号,想留哪个就写哪个?明白了吗?因为它的作用就是搜索替代,你把这个要搜索的东西分成小括号,小括号你这替代成什么,是不是就光留下什么。那气候成斜杠一,不就是光留下第一个小括号吗?你替换成斜杠二,不就是光留个第二个分组吗?这样的话你想留哪个留哪个。由此,我们就实现了。取它的机名和目录名。同样道理,我们想取文件的名称和它的后缀,比方说a.b.c点看点DZ。
12:01
是吧,那比方说我现在就想把文件的后缀取出来,文件的后缀就是最后这个算后缀嘛,对吧?哎,最后这个文件后缀,那咱们上午呢,我们不是说过各种文件后缀,比方说有GZ的有什么啊,大Z的有BZ2的是不是啊,那现在我们就要取后缀,怎么取后缀呀。好的那个。先把姿势摆好是吧,摆好姿势嘛,中间就看你写了咋写。那我们就是从前往后找,一直找到。一点它不能结尾是吧,那我们不好描述,那就从后往前描述。Dollar行伟是吧,然后前面的这个东西不能是点吧,啊,那就是除了点以外的。其他符号几个呀,任意一个一个以上对吧,接着是不是应该是点了,然后前面是什么,管你是啥呢,点心呗,那我们把它做个分组,然后这个后缀这部分是不是再做个分组,这不就是后缀了吗?想要后缀二。
13:23
想要前缀?出来了。想要啥要啥?看懂了吗?是不是觉得很方便啊?嗯。大家是不是体会到正则表达式分组的妙用。结合在。有没有感觉到它的妙用啊?啊,那这些例子呢,我这应该都有啊,看看啊呃,看看有没有取那个文件的后缀的。
14:08
这是取地址的,呃,这个有这个,这个我讲的取机名。有没有取文件的后缀的?啊,好像没有,没有就补上。加上取文件的啊,前缀和后缀。这是后进,这是前进。是吧?
15:00
那接下来我们去判断一个文件的后缀,现在是不是就有招了,那取后缀取出来,那我就判断这个是DC后缀。还是啥后缀,我将来是不是就知道应该用什么命令,再配合case判断一下嘛,你是GZ后缀,那我们就拿GZ吧。你是XZ,后缀是不是XZ?是不是,哎,不同工具就配合上了,咱们上次好像也取过文件后缀,上次我们写了个脚本,咋取的文件后缀来着。啊,上次怎么把这个文件后缀取出来的。倒re,倒过来的是吧?正过来倒过来用gra能不能取啊?啊,那咋取来着eo是吧?啊那咋取啊,点心斜杠点,然后呢。
16:02
这这这这是取前缀了吧,这后缀咋取?那非那你这个Dollar加啊非点脱字符点,然后加这个,这是不是也可以取啊啊这个也可以取。就呢,它可以起前缀,也可以起后缀。当然这个用grape要取前缀,怎么取来着?我要取前缀,能不能取出来?那点心点心。一直到不是。那个咋表示,那就是斜杠点。
17:01
对吧,哎,那这样的话是不是就可以了,但是他这个多了个点啊,多了个点,你这个点还得将来还得想办法,不想要的话可以处理一下啊,就是两种处理方式啊,但是赛呢更巧妙。因为巧妙的采用了分组的方式来实现。啊。好,那接下来咱们来看。我们用这个命令。把这个地址取出来,同学们怎么取?首先把第二行取出来,好简单吗?我们刚才讲过可以取第二行,咋取啊?
18:02
然后接着我们要把IP取出来,那你说这个IP咋取啊。IP的话呢,那就是把前面的去掉,后面的去掉,留下IP,所以我们可以更简单一点,抛头去尾,用搜索。行首点心I把它替换成空。这不就取出来了吗?然后再次晒晒。从空格net mask点心用空代替。这不就最简单的方法对吧?但这个方法有点笨。
19:00
那我这写的太多的赛道。合二为一行吗?那怎么合二为一呢?那第二行是不是我们直接这么写就行?对吧,诶你看成了是吧,关闭自动打印,然后。把内行打印一下。行了吧。那还有能不能把这两个再合起来呢?你。那实际上呢,赛命令它有一个用法叫杠E用法。杠一呢,就是允许我们。把多个对文件的操作放在杠一的里面,就是我们可以做多次啊。
20:03
那我们这儿可以做多次处理,看到没?就取取出地址来了,但是这个地址取出来是取出来了,不完美。不完美。不完美,原因是因为不通用。六上不支持这个命令,七上通用。六上不通用啊,那我们要做到六也通用,那咋弄啊。六上也通用,怎么通用呢?这是不是就是把IP地址取出来。怎么把IP地址取出来第二行。
21:01
搜索替代怎么把地址表示出来呢?那我们就是。点心后面是数字点。那怎么表示啊?嗯。这个是数字点吧,啊,那数字点怎么表示。09点多少个呀。
22:00
零到九减三。那它那个数字点儿,数字中间有四个。四加三七个最多,七个最少最少七个最多。12加35个。12是怎么来的呢?就是数字最多三位。255252525啊,再加三个点。所以三四一十二再加35,但是那你后面这个东西再怎么表示啊。咋表示啊?那你看这边呢,它是个b pass,那你看这边它叫什么呀。
23:00
这边是ne ma,所以这个不一样吧,这个不一样的话呢,你怎么做到通用的。因为你这样写的话,有一个问题,这是不是也匹配要求,这也匹配要求啊。所以这个怎么怎么去把它匹配出来。那我们从行首一直到皮特这。然后这个地方是有个冒号,而我们这边呢,这边是没有冒号的,是个I,所以这还不一样。那你看这个点星,我们这么去匹配,你把它括起来,括起来的话呢,后面还可能还会再出现。因为如果你这样写的话,点心是。
24:00
相当于啊,任意字符串,所以呢,我们这么写,我们可以这么写,搜索我们前面不能是数字不就得了。脱字符不能是数字,脱字符非数字。一个以上。那你想非数字从行首一直到这儿,是不是也只能到这了,因为后后面是不是不满足要求了。然后再往后,那就是点心,然后我们把它括起来,作为一个整体。哎,再来一个杠E关闭自动打印斜杠一。OK了。当然这个地方你甚至都可以啊,我们看看通用吗,整个八通用吗,用不通用啊。
25:08
看懂了吗?啊,默默无闻是吧。那那这个我刚才说了啊,这个啥意思啊,这个就是从行首,紧接着就是后面不能是数字。那你想从行首紧跟着不能数字,不能数字,不就这些是符合要求的吗?那不认数字,诶到这突然符合数字了,那这是数字,这不是数字吗。对不对,那而且我用小号括起来,这不就扩到它了。啊,你像再往后他已经不满足要求了,所以这些点心一直到最后是不是也就是匹配了这一串,所以我们用这种方式是不是就把这个IP给标出来了,标出来以后用个小括号括起来留下它,是不是就搜索替代留下了IP地址。看懂了吗?看不懂是吧,看不懂敲十遍。
26:02
啊,复制十遍。哎,这个是一个通用写法啊,当然我看我这之前怎么写的啊。啊,看看我之前写的时候有没有这个IP地址取地址的写法,呃,刚才好像有取IP地址取IP地址啊,这个这是第二行嘛,啊,你看这个就是这个写法是吧,不是数字一直到这啊,就这这个取法啊,一样的啊。当然这个写法并不是唯一写法啊,你可以写任何很多其他写法,这都可以的,甚至我们可以分成两行处理,这是分两次,就是直接写两个脚本分别处理也行,那这些写法都是可以的。那我刚才写的这种写法呢,啊来。
27:08
啊,我把它放在这啊。这个写法应该是圣S6,圣S7,圣S8,乌邦兔都支持。啊。大家看看我这个写法,这儿就是这是写了个兔字符,这没有写兔字符。啊,这个这个就是数字点,没有说多少位,这也可以,实际上你不写多少位,它也就是数字点嘛,所以这也可以,你可以用更简洁的写法,这个写法来实现,这个写法也通用啊,这个写法在六上也支持一下啊,啊你看也没问题,是没问题,这都可以。啊。啊。
28:04
啊,另外我们现在就可以用来把咱们前面分区利用率这个数字再取一下。把分区利用率这个数字再取出来,怎么取?这回你就可以。更加方便了,咋取啊?首先我们是不是先利用S的正则表达式,把它先过滤成我们想要的那些行脱字符?以DVSD开头,但是这个需要转移啊,先把这个行先打出来。拿出来了吧,当然,我们接着要搜索替代。搜索替代什么呢?搜索替代出我们想要的分区利用率,实际上这个超简单。你不觉得吗,点心?
29:03
空格,然后来个数字零到九,一个以上百分号,把它一分组,是不是很开心的就取出来了。嗯。斜杠一,哎,这个百分号分组。点心把它全表示出来。这样的话,你看这个数字,轻松一条命令搞定。这比以前咱们写的那什么TR压缩那个low,那个是不是有点low了。现在我们一个赛的搞定了啊,什么这个TR啊,这个great不用了,是不是觉得幸福了很多啊,你们越来越痛苦了,我没有增加你们的幸福感,增加了你们的痛苦感,因为你们功能强大。
30:26
啊,所以这个分区利用率瞬间取出来了,看我这有没有那个案例啊。呃,分区利用率。啊,这个分区利用率之前是怎么写的,我看看。这个好像没没写。这是光是取的那个什么了,那我们把它也拿出来做一个案例,嗯,返回分区利用率。
31:15
当然你都返回根据利用率来了,你再说排个序是不是就很简单了,对吧,这应该就不用说了。啊,所以大家慢慢会体会到啊,就是这个分组呢,非常有用,你分几个组,你可以把这一行分成若干个组,想留哪个留哪个。好。文件的前缀。
32:00
然后我们现在还可以把。一些注释的行给他取消,比方说我们拷一个这样的文件过来,那对于这个文件来讲呢,大家看这个文件有好多是井号开头的行,现在呢,我想把这些注释的行删掉不要了,那这个怎么去删掉它呢?井号开头好像删掉怎么删,那你就标识一下呗,S井号开头行怎么表示啊,数字符井号点星是吧啊。然后用空代替,不就把它删了吗?是不这意思。你看。
33:00
然后接着我们想把它真正修改了,I就改了吗?是吧,啊,但是它的空行还留着的啊。空行就是我们现在是把它搜索了,那你看这个留下的是空白行啊,你看这个空白行,我们来看一下。是不是就是整个空行了。啊,替换成空行了,所以如果说你你你是想实现空白行也不想要了,那你就删就行了,删的话呢,就是满足要求的行给他删了。那就是直接这么写,这是不是就删了啊,看到没。
34:02
啊,所以赛呢,强大的地方大家慢慢体会到了吧。不仅可以搜索。不仅可以查找,而且还可以修改。那现在你可以把我们之前写网卡那个文件再来用来实现了,上次说过这个文件吗?这个文件现在我们要用赛来实现修改,把这行给它改成像我这样。啊,现在比方说我现在没有假设没有啊。没没有这这部分,把这部分呢,给它去掉啊,这部分没有现在改的,像我们刚才一样叫net.if names等于零,哎,那这个东西怎么去改呀。咋改杠A要改是不是等于杠A是吧?那后面这应该怎么去改嘞,那我们先把这行先找出来,这行的特征是什么呢?是grab,这这是不是应该是这个开头啊啊或者你包含这行也行,反正也别的好像没有行了,那这样就行了。
35:21
搜索。替换成啥嘞啊,实际上上次我们已经说过怎么弄,那就是把最后一个分号替换成分号前net.if name等于零,别忘了前面加个空格,要不就连一块。看懂了吗?替换成它。啊,走,看看替换成功没有。
36:01
是不是轻松一句话搞定了?你们的脚本是不是可以完善完善了?初始化脚本不是要求大家写吗?这些东西你都可以用脚写,把它写在脚本里了啊啊,这些初始化的全用,涉及到文件修改全用size搞了。那接下来你把这个脚本啪一跑,哎,这个环境就变好了。啊。啊。啊。所以有了set以后,文件的编辑修改全都可以用set来实现批量修改,当然set不适合改太多的东西啊,比方说一个文件改个两行三行啊,你用set改,如果说这个文件那几十行都要改,那你要用set很痛苦了,我那是交互式的,我们将来要实现批量的改,那怎么办呢?啊,如果真的是文件太多了。
37:01
建议大家就别改了,那怎么办?你自己写一份文件,把它复制一下不就行了吗?替换了,干脆把这文我的文件把你替了就得了,就是拿一个现成文件改好了,直接替吧,如果太多了就别这么改了,如果改个一两行,是不是再改一下就行了?太多了,你何苦呢?是不是自己编一个文件,把它一替不就完了?这个思想慢慢你们会体会到啊,因为我们将来会学很多服务。而且呢,经常会实现批量的上啊,批量的去部署一些服务,那肯定会涉及到一些配置文件的更改,那这些配置文件怎么改,那改少了用改多了就直接复制粘贴,把它替换了就得了,自己事先准备一个模板是吧,传上来完了。好,那赛的精髓相信大家慢慢已经体会到了,是吧,哎,精髓。
38:01
在中也可以用变量。好,大家看,你看这个命令做的事是什么?嗯。这个命令做的事儿是什么?哎,实际上呢,它就是生成了一个RMVB的随机文件。每次生成都不一样。这是said,当然这个red呢是随机数,这是个变量,但是呢,这里面用的时候,我们外面用单引号行不行啊,你看我之前写的时候是不是都是单引号单引号的。对吧。
39:04
这不用单引号写的吗?那现在用单引号行吗?问题来了吧,因为他把Dollar red变成了就是普通的,我们说过这个戴永豪好像六亲不认是吧?啊,傻瓜式的嘛,你来啥我认就是认为是啥。不认啊,所以这个变量就识别不了了啊,那也可以用双引号,但是有的时候用双引号不行,为什么呢?因为这里面本身就有双引号。你这里面已经用双引号,外层是不是就不能用双引号了,要不就混了。那在这种情况下,那么我们只能用单引号的情况下,那咋办呢。外面还只能用单引号,它里面我就想让它识别变量,诶有一个巧妙的方法就是杠杠杠嘎嘎嘎行了,那这就是S的一个特殊用法,三个单引号啊。
40:10
加起来六个,把它括起来就OK。那实际上它表面上是这样,实际上它串起来,它是凑起来,你可以认为是这么一段,然后这是一段,然后生生的把它凑起来。理解了吧?啊,实际上说是三个单引号,实际上它是凑起来,你可以认为是我们是这么来玩的,是这么来玩的,大家看明白了吗。给他凑起来了。好,所以以后你们在里面用变量就知道怎么用了啊好了,那到此呢,Set命令的基础用法咱们就介绍完了,当然真正的高级用法我们还没说呢。
41:07
赛还有更强大的用法,不过呢,这个用法我建议你们就别学了啊,因为刚才的基础用法已经有同学都已经听不懂了,当然了,相信班里头肯定还有一些比较聪明的同学。所以我针对聪明的这些同学单独讲一个小灶吧,啊,如果已经听不懂,同学可以放弃了。啊,这块算是拔高的啊,不要求啊,你想听就听,不想听你可以先放松一下。这部分不掌握,不影响你拿1万块钱工资。掌握了也不一定在拿拿就一定能拿来1万块钱工资,这属于高级用法,高级用法就是有有些特殊情况下可以用啊,可以提高效率啊,这部分呢,了解啊了解好,那下面咱们来说说高级用法,高级用法说是在好多运维工程师干了十多年,他不一定用。
42:07
太高级了,高级的他们都不用,但是确实好好好,功能真是强,那下面咱们来说说高级用法,这里面呢多了一个模式叫保持空间。在S中呢,它除了我们原有的模式空间,又增加了一个新的保持空间,那这个保持空间和哎,这个刚才一直没打开赛,你看现在终于打开了这赛的那个官方文档啊,所以大家如果想从头到尾的详细了解赛,你看这个文档就行了。这边那里有大量的例子有选项啊啊。
43:07
啊,我登录一下。好,那接下来我们来看一下啊,这个里面它。多了一个模式,那这个模式呢,叫保持模式。
44:00
保持模式,保持模式呢是这样的。除了原来的假设,这是一个文本文件,这个文本文件里面有若干行。那一行一行处理,其中呢,我们每处理一行,先把它放到所谓的模式空间。除了模式空间,系统还增加了一个新的空间,叫所谓的保持空间。保持空间。这个空间是两个独立的空间,那么当我们去处理某一个文件的行的时候呢,它可以基于这种逻辑来处理啊,比方说我们这个文件里面有若干行。那这个若干行在处理的时候,比方说我们这放一个行啊,这个行看怎么去描述一下,没有没有标注某一行的信息啊。
45:09
那我们就拿这个吧。哎,这是一行,假设这是第一行,那我们一个文件有好多行啊,将来可能还有第二行,第三行。啊。现在这个文件里面有第二行,有第三行,那他每次处理的时候都是把这一行哎复制出来。放到咱们模式空间中。啊,这个是模式空间,这叫模式空间。叫patternsk。而下面这个呢,又多了一个新的模式,新的空间叫保持空间,这个保持空间呢,咱们称为后的space。
46:11
这个实在是不好看,还用这个吧。那保持空间呢,我们可以认为是相当于一个中间的。呃,临时保存区,临时的缓冲区。当我们把这个行处理的时候,如果还没有一次性处理完,还想后续再处理,在set中,它默认是读入一行,然后这行处理。玩不完,反正接着就下一行就进来了,下一行一进来,那么原来这一行就没了,所以就导致我们如果想后续再想用这一行就没法放了,那因此呢,我们多了一个模式空间,呃,保持空间,那么就意味着它可以把这一行没有处理完的这一行给它临时的保存到下面去,放在这了,那这时候呢,你再把第二行读进来的话,是不是我们下面这一行还留着呢?
47:11
这样的话,我们将来还可以再把它恢复回去,哎,再给它拷回去,考的时候呢,我们有两种逻辑,一种把它覆盖了,一种是放在后面,听懂了吧。那这样的话,我们是不是将来功能就更丰富了,这就是模式空间和保持空间,保持空间主要多了这样的一个保持空间的特殊空间,那具体我们来看一下这里面它支持的模式空间和保持空间的操作命令。其中有一个大P,大P和小P不一样,小P是把某保持空,就是模式空间里内容全部都打印,而大P只打印模式空间中。第一行的内容。因为它到斜杠N结束,那么斜杠N不就是换行吗?所以只打印第一行。
48:04
而H呢,是把模式空间的内容覆盖到保持空间。而大H是追加,也就意味着我们如果用小H和大H,无形中就实现了模式空间和保值空间数据的互换,哎,就实现了这样的功能,那比方说如果是小H就把这个内容给覆盖了。啊,比方说我们这边有一行。已经有了一行,已经有一行,那么如果你是小H,那就意味着把它覆盖了,这里面就变成二了,就直接把它盖住了啊覆盖了啊,那如果是大H,大H呢,是追加,那追加的话呢,是不是挪到后面去了,听懂了吧?哎,他是这个意思,注意一下。
49:02
一加一加后面。啊,变成这个样子了啊,这就是他们H和小H的作用,那此外我们还可以支持反过来把保持空间内容放到模式空间去。小G大G就是干这个活的啊,一个是覆盖,一个是追加,X呢是互换。哎,小N是匹配行的下一行,覆盖至模式空间,那读到下一行,然后大N呢,是匹配行的下一行追加至模式空间。D是删除所有的空间行大D呢是删除这个第一行,这是删除第一行。啊,所以我们现在看一下这些例子啊,这些例子我们讲了几个,大家体会体会,其他的例子大家下来可以自己思考,比方说我们这边的小N小P。
50:08
小N对照这个图说的说,匹配行的下一行覆盖至。模式空间,那P是打印,所以那大家来看一看,比方说我们这么来写,那就是NP。啊,NP前面呢,有一个关闭自动打印啊,大家看最终实现的是2468偶数行,它是怎么实现打印偶数行的呢。大家可以分析一下它怎么实现。首先我们读入第一行,读入第一行以后,是不是把它放到所谓的模式空间。模式空间放进来以后,那现在我们把第一行读进来了,第一行读进来了,这第一行它执行了个NN什么意思呢?是匹配行的下一行,那就是下一行为N覆盖字母容接的,是不是就把它覆盖了,而且要打印,而且呢,它还变把自动打印给关了,那也就是说把第一行读进来的时候,那个字段也没打印,光把第二行打出来了,那不就把第二行打出来了吗?
51:27
那接着是不是第三行又读进来了,读进来一看关闭了,打这第三行不打,但是呢,我们这又看NN是下一行,又是不是把第四行给覆盖了,所以是不是就老是打印偶数行,就实现了偶数行打印看到没有。好,那接着看这个大NS斜杠。这是什么意思?那我们执行一下看看效果。啊,你看看这什么意思呢。
52:01
就第一行把第二把那东西掉。大N,想想大N是什么意思?大N说的是把匹配行的下一行追加至模式中间。啊,所以我们现在比方说我们把第一行,第一行读入到咱们的魔式空间里了,第一行读进来了,读间来以后呢,嗯,他一看是大N,大N呢是这个下一行,而且追加,追加的话是不是放在这对吧,哎,就变成这个样子,接着呢,他又把这个里面的内容进一步的搜索替代,那S斜杠N斜杠式换行,是不是把中间的换行给删了,是不是就变成了一二。那同样3456不都是这么来的吗啊。它就这么来的啊,这就是第二个例子,那第三个例子,再看第三个例子是什么意思。
53:02
一。是不是有朝一日倒过来?是吧,那这个倒过来是怎么做的,你分析分析它们还能倒过来,这是什么意思?一叹号大G,就是不是第一行叹号取反吗?就是不是第一行的时候就大G,那就是第一行,那就不做这个操作了呗,所以我们把假设就我们就分析四行就分析出来了啊总共四行,那现在我们刚读进来的话,是不是这里面就是第一行,第一行读进来以后,不是第一行才大题,所以呢,我们是第一行,那这个事就不干了。不干了,那我们就执行,HH说的啥呢?H说的是把我们模式空间中覆盖至保障空间,保障空间在这呢啊,那么就是这里面放一嘛,对吧,这里面空的嘛,刚开始保持空间是空的,所以它覆盖覆盖覆盖不也是吗?
54:09
啊,然后Dollar叹号D什么意思,叹号是取反,Dollar是最后一行,那就说不是最后一行就D,那我们现在是第一行,不是最后行,DD删除是不是就删了,所以我们执行完第一行以后,整个命令最终结果就变成这个样子,好,那接着我们把第二行读进来了,第二行一读进来,他说不是第一行打进,哎,我们第二行不是第一行。所以大G大G什么意思啊,是把模式保持空间追加至模式空间保持空间里面有个什么东西,一追加,追加是不是变成二一了,哎,二一。然后接着小H,小H是不是把模式空间内容覆盖,那么是不是就变成二一了,是不是里面给覆盖了,变成二一了,然后他说不是租一行D,那我们这还不是最一行,是不是就把它删了啊,这里边就空了。
55:09
这里面有个空了。啊,那现在已经读到第二行了,那接着第三行又来了,第三行来进来以后呢,放在这儿,他说不是最后一行,不是第一行大G,那这不是第一行大G,大G什么意思,把后面的模式空间,就是这个保持空间中追加至模式空间啊模式空间那是不是321了。啊,然后呢,HH是不是又把它覆盖了,这里面又321了。对不对,D删除是不是就变成了这样,所以最后一行来了以后,是不是还是4321就这么来了,所以整个最后呢,就变成了。倒过来的,大家看懂了吗?这个意思吧,啊,你看这个就更绕了,你要直接看同学们我估计都不知道啥意思了,这啥意思啊,这个是什么意思,我跳过这个了啊,我们就看看这个看起来好像挺。
56:15
挺挺挺有意思的啊嗯,这个你能看看懂吗?这个三呢表示第三行啊,那就是如果第三行我们就执行HH什么意思啊,H是把模式空间追加至啊,这个覆盖至卯持空间,那是不是就是模式空间里面有三,这里面保持空间也有三,对吧?然后其他的行没说,那只有第三行才处理,那只有第三行处理,那么比如说第一行来了,第一行来了他不是三第三行,那所以就不做,然后呃,99H9的是第九行的,所以也不做,不是第九行就三,那所以这行就没了,那第一行就相当于啥也不干。
57:03
那第二行来了以后也啥也不干,第三行来了也啥不干,第四行第第三行来了,第三行来了是不是把第三行放到模式空间里去了啊呃,放到保值空间里去了,然后G呢,是第九行,那现在这不是第九行啊,不是第九行不干了,然后删了,所以就光留下第三行了,然后呢,接着我们第四行,第五行,第六行都是这样,都给删了,一直到最后第九行,第九行的CH谁也不干九,这是就第九行了。第九行是什么?第九行是把保持空间追加至那,所以原来是有九是不是三就就放到里面去了。然后不是就是如果不是九行就删,那现在是第九行不删,不删是不是就打印就把九和三给挑出来打了,其他行全删,所以实际上最终就把九和三竖过来。就把第九行和第三行留下来啊,看看是不是这样的逻辑,你想我能留下第三行,第九行,你想留哪一行不就由你说了算,看懂了吗?是不是带着功能强大到。
58:12
啊,没有朋友是吧,太强大了,所以我们就不用学了是吧,有些同学算了不学了,哎,可以不学啊,这部分扩展知识啊扩展知识,当然你将来要写成就是代码来写到脚本里面,别人一看你说这是什么东西?是不是别人都看不懂啊?老板想开除你。别人一看你东西看不懂,没法接替你的工作呀,所以你的地位巍然不动是吧?公司里的地位别人替不了你,别人不会呀,离了你没法转呢啊。所以有些高级东西看你自己个人了,这个我就不强制了啊,想学就学,不学拉倒啊。
59:02
好了,这是咱们给大家讲的高级用法啊,那实际上呢,对于大家来讲,我要求大家把S的精髓至少搜索替代,再加上正则表达式,是不是这个得掌握,尤其那个分组后项引用。有了这个以后,可以说是改文件,想改哪改哪。你想改中间,你想改前面改后面怎么改都行。所以这就是赛的精髓,希望大家把S这块呢记住了啊,所以三剑客两个剑客已经讲完了啊。K。E,可咱们过一段时间再讲吗?啊,不能讲太难是吧。过一段时间再讲好了,那这个正则表达式,我们结合这部分咱们就接下来了,那接下来呢,下一部分我们要讲另外一个新的东西,软件包管理好,我们稍微休息会,待会来讲。
我来说两句