{eval=Array;=+count(Array);}
谢谢邀请,我来回答一下这个shell命令!
sed命令既可以直接输入到控制台中执行,也可以放在脚本文件中执行
sed对于传入的数据流会逐行的读取
对于每行中匹配到的数据才会使用命令进行修改
它并不会修改原始的数据
生成的新数据会输出到stdout,一般是控制台,也可以输出到文件
(1)使用管道命令输入数据
(2)替换文件中的数据
1.log
是我们的数据文件我们直接处理
1.log
这个文件的数据,并且这次我们使用两个匹配命令(用分号隔开就行,前面加了一个-e,其实不加-e也没问题),可以发现处理后的数据已经正确的打印出来了,如果你再去查看1.log
的数据,会发现sed 并不会修改源文件中的数据。如果需要把生成的新数据输出到一个特定的文件中,可以使用重定向大于号:
(3)将命令写在文件中
有时我们会反复用一些命令,如果每次都需要手动输入那就太麻烦了,好在我们可以把这些匹配命令写在一个文件中
看上图,我们现在把命令写在了
s.sed
文件中,运行sed命令只需要在前面加-f就可以了,是不是很方便。(4)替换标记
我们可以认为每个替换命令就是一个正则表达式,所以每单个命令在一行中只会被使用一次,靠前的命令会被优先使用,要想全局匹配可以在命令后面加一个g
可以发现第一行在加上g的情况下,已经被完全匹配,这个g也可以被数字代替,指定替换第几个位置。
也可以使用w来将生成的新数据输入到文件中,但是在多条命令情况不是很好用!
(5)单行替换
文章开头说了,sed会一行一行的查询,有时我们只想替换指定行的数据,那应该怎么办呢?可以在s字母前面加一个数字代表第几行
看上图只替换了第二行的数据。
我们还可以指定行区间`开始行+逗号+结束行`
如上图,第一条命令替换第二行和第三行的数据($代表最后一行)
注意,对于这种方式的多条命令指定的行数只对单条命令生效!当然我们可以用大括号将所有的匹配命令括起来,把指定的行放在大括号的左侧,那么指定的行就会作用于多条命令,如下图:
另外还有一种方式可以指定特定的行,就是在s前面再加一个文本匹配命令,如下图:
我们用These这个字符匹配第二行(These字符串前面必须加上斜杠)
(1)上面介绍的指定行数也适用于删除命令
无论是行数字匹配还是文本匹配都没问题。
还可以使用匹配文本的方式删除区间,如下图:
匹配了These和Those字符之间的三行。
这两个命令和js中insert、append语义一样,果然语言都是相通的!
这两个命令比较简单,但是要注意前面的行不能是区间,这个应该比较好理解!
这个命令会替换整行数据,修改行可以使用行数区间
命令格式 y/originchar/replacechar/,originchar和replacechar必须一一对应的,否则会报错!
这个也比较简单就不多说了。
上面我们提到向文件中输出数据可以使用w,那么从文件中读取数据可以用r,如下图:
我们很轻松的就将
2.log
文件的数据读了出来并且插入到了1.log
最后。r前面可以是行数也可以是文本匹配。
这里只是sed命令的一部分,还有很多其他的用法,后续有空我再接着写!
另外,前端学习linux命令还是很有必要的,因为我们要经常使用node,它无论作为服务器还是工具都可以配合这些命令。
喜欢我的回答就关注我吧,有问题可以发表评论,我们一起学习,共同成长!
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答