00:01
好赛的命令,它是位列三剑客之二。当然,排在老二,不一定他的能力就是老二啊。应该说他的能力。嗯。应该比spring要强。啊,可能不如aw k,但是实际上也不是,他有自己的优点。Gra,实际上准确的说,Grape能干的事,Said基本都能干,Said能干的活儿不一定能干。所以晒的功能很强啊。嗯。Set这个命令的工作逻辑跟我们前面讲的grape一样,也是基于着行处理的逻辑。大家是否还记得博是怎么工作的?是不是读入一行,然后根据它的?
01:09
模式进行匹配,如果符合模式就打印显示这一行是吧?哎,如果不满足要求,那就算了,就看下一行。他是读一行一行一行这么处理的。而且呢,它会自动处理完了以后。他能不能再反回来,接着再重新第一行接着处理啊。他不行啊,就一次性的从上处到从上处到处理到下完事结束了。赛的工作逻辑跟这个一样,不过呢,赛里面它有一些自己的特点。Said,它也是把一行读入放到一个专门的set的内存空间中。这个内存空间咱们有个专业的称呼,叫模式空间。
02:00
叫模式空间。就这个。叫模式空间,当然也可以成为缓存空间,就是把第一行读进来,然后处理,处理完以后呢,它有一个默认的输出,就是如果读入一行默认,它就会自动的把这行在屏幕上进行打印。我们把这种行为呢称为自动打印行为。也就是说它不像咱们gra gra呢,你得写条件,你写条件了,符合条件了才打,你不符合条件的不打了,这个set不一样啊,Said呢,它是读一行,符合不符合条件呢,默认它就会在屏幕上给你打一下啊,除非你刻意的把它删了,你不删的话它就给你打。啊,当然如果符合条件,那就再打一次。那换句话说,是不是就打两次了?那么默认就会自动打印一下,然后你再说要打印一下,它就打两次啊,这是默认的。
03:03
然后也是着行处理。把所有的行处理完,最后呢,这个命令就结束了。那么在处理过程中,它是放在这个所谓的模式空间里面啊,叫pattern。因为side和grape一样,它是一行一行处理,所以我们叫行的这种方式来处理的。那么它的命令来自于stream edit啊,什么意思啊,这是。啊,不说话英语不太好啊。我刚才有同学说了,刘啊刘。流水的流啊。那流编辑器,流编辑器它是一行一行来着行处理按照流水线一样类似。
04:04
它和VM不一样,VM的处理逻辑呢,是把整个文件加载到内存里面。当然,大家想过没有,用VM去编辑文件,如果一个文件特别大,你会发生什么问题?你想一个文件,一个G的大文件,你说你要把它加到内存里面。这中间万一内存不够还打不开了,都是不是就死在那了?而sad呢,不是,Sad是读一行处理一行,接着再把下一行读到内处理,所以你管你文件多大,慢慢一行一行都给你处理完。所以赛的命令,它是不是可以处理特别大的文件都没问题。因为他不是一下能处理完,它消耗内存不大,因为它一次只处理一行。所以对于大文件,用set处理是很适合的。而且呢,它是一个非交互式的操作。
05:03
而VM是交互的,交互的话呢,是不是只适合于。临时改一改文件。而set命令,它不仅可以把文件的内容进行展示。他还可以进行编辑修改啊。所以呢,叫行文本编辑器。就是一行一行的文本编辑。所以用set命令,它可以批量的修改文件的内容。不论这个文件有多大。这一点是grape做不到的。为什么说grape做不到?我们说过grape修改文件了吗?我们讲过grape是来过滤某一行,来显示一下而已,而said可以过滤,也可以修改。所以said,如果将来我们工作中遇到了想修改某个文件的某个地方,你就应该想到用said,哟,怎么掉,掉下来了。
06:03
就没砸着人嘛啊。高空坠物啊,这是。啊。啊。那赛命令它的这个使用啊,官方的站点呢,这有帮助文档,大家如果想看的话,可以来看一下。赛的命令呢,这个命令的使用呢,也是非常丰富的。那我们今天呢,只是给大家把一些最比较常用的功能做一下介绍啊。要真的深入学习,可以写一本书。就跟VM一样。这网站这么慢,金庸项目的一个网站。
07:12
那么好,那下面呢,咱们来说说赛的用法啊,首先赛呢这个地方加选项。啊,再加脚本,也就是说右脚本,注意这个脚本可不是我们以前学的线脚本,是人家赛的自身的脚本。啊,要说啊,那看来赛自己有自己的语法呗。意思是赛的自身就是一种语言啊,那我们又得学一门语言了,前面学过share语言了,今天来学的语言。后面还有aw语言。后面还有各种各样的语言。无数种语言,你慢慢学吧啊。所以当我们课程结束以后,你说会多少种语言是不是啊?
08:05
各种语言后面呢,再跟上要处理的文件。啊,当然你要不写文件的话,那那他就对标准输入来进行处理。是这样的,那下面呢,咱们就来给大家来说一说S命令的脚本格式,这个脚本格式是这样的,这个脚本格式很简单。没那么复杂,脚本格式就是。把脚本放在单引号里面。脚本如果有多个逗号,那个分号隔开。单个脚本呢,它的格式就是这样,地址加命令就这么简单。其中地址指的就是你要处理哪些行。那么这个条件呢,有下面的这些方式,比方说我什么也不写。那这个地址空的,那空的呢,就是表示全门。
09:02
呃,相当于你没有对文件做任何条件的约束,那就是所有行都满足呗。嗯。那么第二个就是单地址。单地址,比方说我们可以指定某一行。某一行,那就是直接写行号。比方说我们直接写一个数字。啊,十就是第十行。那你也可以用Dollar表示最后一行。也可以用正则表达式来匹配正则表达式对应的某行。写在双两个斜线中间。也可以表示范围。比方说从第几行到第几行。啊,比方说我们从第三行到第六行,那就是三逗号六,那如果我们想表示从第几行到往后的几行。比方说三逗号加四,那就是第三行,往后再加上四行,那就是到七行。
10:05
这个表示的就是从第几个模式匹配开始,一直往下找,找到满足第二个模式之间的所有。可以混用,可以混用,行号和模式混用。还可支持不进。比方说一波浪波二,表示从第一行开始,每次增长两行,那就是1357这么慢长。那么二括号二呢,就是偶数行。啊,从2468怎么来找。啊,那么其中呢,命令,这不是前面是地址吗?后面是命令,那命令用的最多的就是小P,小P是打印,所以我们现在来看一下,那现在我们来看看,如果我们想执行文件的处理,例如我们就拿这样的一个文件过来吧。
11:08
啊,这里面文件太多了,算了。好,那我们就拿这个文件来练习啊。用said,如果我们后面什么也不跟,这个语法缺东西,不让你执行,它会列出said的帮助。其中选项这加的就是那个脚本。啊,然后这跟的就是你要处理的文件。那其中这个脚本呢,我们说了你至少得地址和命令,那地址不写,你给有个命令吧,所以我们加上一个什么呢?地址我先不写,命令我们加个PP,不是说那个命令吗?P就是打印的意思,那如果我们什么也不敲A回车,这是啥意思呀?那你应该猜到啥意思,那是不是就是说如果你没有指定输入的文件。
12:14
那么大将从标准输入来读取数据吧,那比方说ABC。诶123啥意思,知道为什么吗?那一下出三行啊,我有一行我敲的,但是为什么后面来了两行啊,哎,我们刚才说过了,他默认有一个自动打印啊,你又写了个屁,他又打一次对不对,嗯,当然那那那这样吧,那我中间不写东西行不行?是吧,空着走,哎好像也行123哦,这啥意思,那是不是就是你不打印不打印,那他反正他有个自动打印,那就给你打出来了,那这就这样的一个效果。
13:03
啊,那好了,那既然支持标准输入,那么我们是不是就可以支持标准输入重定向啊,那所以我们是不是可以,哎,干脆这么这么搞一下。啊,比方说随便扫一个文件传进来。是不是就把这个文件给打出来了。啊,当然,那既然它支持标准输入重立向,那我们是不是也可以支持管道啊,是不是一样吗?啊一个逻辑嘛,啊一个逻辑看来赛的命令A好像已经实现了最基本的看命令的功能。对吧,不就打印个文件吗?当然我们实际上用不着这么麻烦,因为人家后面支持直接写文件,你何苦何必呢,是不是?啊,但是呢,既然有这样的逻辑,那是不是我们用set处理的可以不是文件,是不是也可以是别的命令的标准输出啊?
14:00
是不是这个道理啊,那比方说我们想把I contact这个命令的执行结果用啊S来进行输出,那我也可以这么干呀,你看这不一样吗?啊,都是可以的啊。那接下来咱们重点来说一说这个。杠P这个选项,那刚才我们也提到了,这有一个杠P是表示打印,那如果你不写它有个自动打印,那么我把这个自动打印能不能关闭掉呢?啊可以关闭自动打印,那就是有一个选项叫杠N选项。关闭自动打印啊,你把自动打印给关了,那自动打印关了的话呢,咋关呢,你加个照灯就关了,你猜猜啥结果。想象出来啥结果吗?
15:00
看看猜对了没?啥也没有了,为什么你这个啥也不执行,你又把自动打印关了,那不就啥也不干了,但是你要加上个屁就打一次了呗,你自动打印关了,那屁不要打印吗?这不就打印了一次吗?对吧?啊,这个没啥意思呀,你这学半天还不如cat命令呢,对吧?啊,当然我们先体会体会,那接着咱们就得退出赛的强大之处了,刚才不说了吗?我们刚才不是没加地址,没加地址是不是所有行都打,那我可以加地址啊,比方说直接写行号对不对?那我们这儿是不是可以直接写第几行,你们想关心第几行啊?22P是吧,啊比较经典,好3P也不错呀,那3P就是第三行对不对,你看是不是第三行,是不是真的第三行是吧?哎,你看你想挑第几行挑第几行。
16:07
大家记得我们曾经也搞过这个事儿,不过好像有点头疼,是折腾了半天才把这个第几行打出来的,我们怎么弄得来,最早的时候,哎呀,我们比方说你看这个命令,这个命令我们是不是想把第二行打出来的,第二行打出来,我们是先把前两行打出来,然后再挑最后一行,现在诶,咱们可以一步到位了,是吧,直接2P看看。是不是一下觉得幸福了很多?所以我们越往后学你越幸福,是不是因为后面东西越来越难了,但是功能也强了啊,你学到身上以后太有意思了。第二行。啊,当然这个仅仅是S命令的一个小小的功能而已,算不了啥,那当然我们还可以起范围啊,第几行到第几行不也都可以取吗?
17:12
对吧,啊,当然我们甚至还可以可以过滤,比方说从什么地方开始到什么地方结束。啊,比如。啊啊,从A字母开头到F字母结尾。那我就可以用。先把姿势摆好是吧?这容易写错吗?那这是A开头到F结尾啊,我说的是F开头啊,就是这个A开头的行到F开头的行。这是不是就出来了,但是呢,这这这中间打的有点多呀,这个。
18:02
而且每一行我发现这个A开头怎么两次啊,两次啊,都两次啊。是不是就是没有关闭自动打印的原因关闭了啊,你看A到F开是不是就搞定了,你看面试题啊,经常出一道面试题就是说。你给我查出几点几分?几秒到几点几分几秒的日志,实际上就是用这个技术,你就把这个几点几分几秒这个日志的格式,用这个方法开始到什么几点几分,用这个格式表达出来不就行了吗。就可以实现。知道吧。没什么难度。啊,这就是刚才我们表示了一下第几行,当然。这也可以表示步进,步进刚才也说了,是表示一个。
19:05
偶数行奇数行之类的啊,那比方说我们用这个SEQ10,然后S,那我们想表示奇数好,那就是一波浪弧二一波浪弧二。诶。P打印关闭自动打印看了吗?那当然这个是不是就是打印偶数行啊,当然你也可以打印那个什么得三行打147,是不是258。麻将序列对不对。那就可以打印了。那除了P这个是我们用的比较多的,实际上还有一个命令也是用的比较多的,就是D。
20:05
D是删除,删除模式空间匹配的行,你看那你想删了的话,他都把我这行给删了,你说在屏幕上他还打吗。啊,比方说EDED是不是就是把第一行给删了。那打吗?那打了,当然你要是再把自动打印关了。嗯。会出现什么现象?啊,因为你自动打印都关了,他原来的行也不打了,是不是就都不打了。当然,那现在大家明白,我们刚才实现了一波浪弧一波浪弧二,这是打印几乎哈,那我们现在有D的话,能不能也能实现呀,怎么做呀。
21:13
啊,我们是不是可以这么做,把二的偶数行给它删掉,留下的是不是就是记。是不是也可以做,但是别忘了,别把人家那个自动打印关了啊,人就靠自动打印来显示。对吧,好,这是命令的一个。用法了。啊,这些这些应该都看懂了吧。那另外呢,这个还有忽略大小写,比如如果我们想不关心大小写啊,比方说我们就想带root,这是什么意思啊,这啥意思啊,你看这命令是不是替代了gra了。
22:11
是不是替代了?Gra干的活我也能干呀,你这不就是包含root吗?当然以root开头的好像也行啊,或活不就完了,Root干的活,这活也不干的活我都能干呀啊,当然大小写这个还是要敏感,那如果我们想忽略大小写大爱啊,不是小爱说的大爱,那个大爱。忽略。啊。所以呢,我发现,哎呀,Grape干的活我也能干。当然了,这样过滤没人喜欢用set吧,所还是命令稍微复杂一点,所以过滤行gra还是用的更多,但是确实能做到。S命令强大不在这,哎,那我们下面这些真的是S命令的比较好的地方,那比方说它还可以在文件的后方。
23:13
来追加某些字符。啊,你可以追加。把这个斜线去了啊多了。追加,那这个追加表示的就是在符合条件的某一个行追加文本,那比方说我们就以刚才说的root为例,那现在我们要在后面追加。在root包含root的行后面追加内容啊,追加内容,比方说我们随便写一个,这个叫呃,Like。啊,由于它关闭了自动打印,所以看不出来了,那我们现在把这个。
24:00
自动打印关闭,大家看看到了吗?这是不是在后面加了一行啊。当然它是加了一行,那这个把文件给改了吗。他不改,刚才我们做的所有的操作都是不改文件,只是显示而已,听懂吗?啊,所以我们现在没有改文件啊,不用担心这个文件被破坏啊,这个文件是没有破坏的。当然我现在加的是一行,那但是如果我想加两行怎么办呀。我想加赖一赖二两行,那怎么办?那你就再换个行,大家看明白了吗?你人为给他加个括号行不就行了。是不是在后面可以加两行?
25:01
啊,那这个地方呢,我们是顶到头了,能不能给它缩进一点啊,缩进能缩进吗。白。那就想缩咋办呀,斜线,斜线表示中间的就是缩。明白了吗?斜线表示中间的东西,就是你要输入的增加的内容。当然,这要想缩地是不是也得这么补啊,对不对。哎,这个东西好啊,那将来我们想在某个文件中追加内容,那就可以用这种方式了,在某个行里面啊。当然我们刚才也发现了这个好像不改文件,事实上要想改文件也行,我们有一个选项能让你把文件改了。
26:03
这个选项呢,就是A选项。A选项叫原地编辑修改,就是把本文件给改了。但是这个改的话呢,挺危险的,因为set命令它是非交互的。你也没看到他怎么改,所以很可能批量的把你这个文件改了很多次,因此我们考虑在修改文件前做一个什么备份,备份的方法很简单,就是加上一个点,后面跟一个文件后缀,这个后缀你叫什么由你说。你叫back,他就先备份一个文件后缀叫back,然后再改,你叫123,他就先备份成123,然后再改,听了吧,所以这个文件后缀是由你加的。那比方说现在我们就想把这个文件给改了,那么方法呢,很简单,我们只需要在这个地方加个A点,比方说我不叫bap,我换一个复制,比方说org也行,那这时候再来看是不是文件就做了备份了先。
27:03
那这个旧文件做了备份,那新文件呢,我们来看看是不是改了RWD,这是新文件被改过的,那改了没改了吧?啊,当然旧文件呢,肯定是没有改的啊,这个文件他们改叫旧文件。呀,有了这个以后好了。Said,可以改文件呀,这个group真的做不到吧?哎,有了said,我们批量改文件。那比方说举个例子,咱们在加入里面,你像我这有8RC,这个80RC呢,它这有别名,这个别名呢,原来这是人系统自带的别名啊,这是系统自带的别名,那系统自带的别名它放在这儿,后来我加了一些别名,那如果我就想在。某个地方来添加别名,比方说我就想在这一行的后面来追加别名,你是不是就可以把这个作为搜索条件,然后在后面给它加上C上一个点名。
28:09
当然有前有后,是不是就有前啊?那有前有后,那后怎么表示呢?那就是爱。啊,I是插入,A是后啊A是后边,I呢是在前面插入,知道吧,就是你前面给他塞一个东西。那当然有前有后,还有什么替换C,就是把你替了,我不要你了啊,把你替了,那这是可以替换的啊,比方说我们现在可以看一下这里面的文件,比方说我们就想把。Line这一行给他替了啊,那我们就可以这么写啊,那么我们可以把文件改了,我就不做备份了,C就是替换啊,那前面我们要表示你要替换哪一行,比方说只要包含lie的这个我给它替了,替换成啥呢?比方说替换成new new了啊,这加个斜线。
29:13
表示分割就是它的开始,当然你不加也行,不加的话呢,就是替换成new赖,然后后面跟上文件啊,你再看。记了没?看出来了吧,是不是T了?记了吧,啊,那就是原来的lie变成new lie了。那那行是不是就相当于给换回。是不是?好,那现在呢,大家可以来尝试来。做这样的事,你把这个文件打开,在申S678的任何一个系统中打开这个文件,上次是不是说过这个文件,这个文件现在要求你们把这一行,你们应该是等于enforce,如果没改过的话。
30:07
你的值呢,应该是这个样子的。应该是s Li等于。你们应该是这样的。是吧,然后呢,把它替换成像我这样替换成这个,替换成这个样子,那大家想想这个命令应该咋写啊。那杠I要修改呢,对吧?啊那咋写啊这个地方。杠杠,是不是得描述啊?那这个描述咋描述啊。啊,这是不是一个forcing。这应该是enforcecing,但是这个enforceing你要光这么写有点小问题,因为上面还有个enforceing是吧,那这个怎么弄啊,诶以它结尾行不行?
31:05
这不就是引结尾吗?应该是上面哦,这个有个点没事是吧,这个点。啊,当然你要是不踏实的话,你先看一看不就行了吗?啊,如果说你觉得这个不好控制,那你就带着先看一看啊,放屁,看看它能不能打出来,把自动打印怎么样呢?关闭,然后后面跟上能不能找到地方。有。啊,因为我这没有啊,因为我这我这是disable的啊,你那应该有的,你能找到。啊,我这是able的啊,我这没有那个,你那有对不对,这说明我们这个语句没错不是吗?然后你把它怎么样呢?For thing刚才说了是不是替换啊,替换成啥,替换成我现在写的呗。
32:02
不就这个吗?不就行了,前面就把它变成A可以了。这不就改了吗?啊,你们试试看能改不?要求大家把这个东西改了啊,这也是我们初始化的一个要求,就这个上次我们是用VI改的是吧,现在就要要求用said改,因为呢可以写在脚本里。对吧。那以后慢慢的咱们把那些交互式的操作通通全变成。批量执行变成批量执行带来的好处就可以写在脚本里了。
33:05
是吧,你现在重装一遍最小化装,把那胶啪一跑就配好了,是不是再也用不着手工一点点改了?哎,马上你就幸福了。哦。这个命令成不成啊?没问题吧,能实现吧。当然这个命令的写法不是唯一的啊,就是说你这个条件,你你你只要能标示出这一行列都行,比如说用S等号作为开头,行是不是也行啊,对不对,这个东西你看你咋写都行啊。而我这种写法带来好处就是确保in house结尾,因为我这个地方已经禁用了,我就不用再改它了。啊,另外呢,这边还有什么W啊R啊,W呢,就是我们把匹配的条件的行给它存到一个新文件里去啊,那比方说我们用root。
34:20
这是包含注册,如果是这个我就把它保存到一个文件里。啊,看看是不是保存进去了,保存了吧,看见没的。是不是就起到了另存为的效果?挑出一些我们想要的文件,特定行啊。保存进去了,那能保存也能读,读的话呢,那就是把一些别的文件读进来啊,比方说R,我们读一个新文件进来哦,大家看你看这行是不是把这个文件给读进来了,然后上面是不是也读了一个,呃,插入到这个后面是吧?啊这都可以叹号呢,是取反啊叹号取反诶好像又有一个新功能了,呃,我们刚才说过这个二什么一什么布朗博二。
35:25
叹号是不是就取反对吧,那号一取反,那不就变成了偶数行对不对,偶数行,哎,偶数哈,这加个P。哎哟,这个不好看。啊,忘了加数字啊是吧,就取反嘛,就是刨来刨去这些。
36:00
模式的行啊,这个意思在这边呢,也可以加上行号,那就是这个就是把那个包含。入的行给它行号给它打出来,哎,这是个行号,这不是有一个等号吗?看出了吧,所以这就是咱们对于赛命令来讲比较常用的写法,但是精髓在下面,这是赛命中的强大之处,对吧?重要的东西我们下堂课讲,休息会再说啊一会。
我来说两句