{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

如何用sed命令来批量替换文件内容?

dreamtecherdreamtecher 回答0 收藏1
收藏问题

1条回答

AaronYuan

AaronYuan

回答于2022-06-28 12:01

谢谢邀请,我来回答一下这个shell命令!

sed命令特点

  1. sed命令既可以直接输入到控制台中执行,也可以放在脚本文件中执行

  2. sed对于传入的数据流会逐行的读取

  3. 对于每行中匹配到的数据才会使用命令进行修改

  4. 它并不会修改原始的数据

  5. 生成的新数据会输出到stdout,一般是控制台,也可以输出到文件

替换命令使用s

(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字符串前面必须加上斜杠)

删除命令d

(1)上面介绍的指定行数也适用于删除命令

无论是行数字匹配还是文本匹配都没问题。

还可以使用匹配文本的方式删除区间,如下图:

匹配了These和Those字符之间的三行。

插入i和附加a

这两个命令和js中insert、append语义一样,果然语言都是相通的!

这两个命令比较简单,但是要注意前面的行不能是区间,这个应该比较好理解!

修改行c

这个命令会替换整行数据,修改行可以使用行数区间

转换命令y

命令格式 y/originchar/replacechar/,originchar和replacechar必须一一对应的,否则会报错!

这个也比较简单就不多说了。

从文件中读取数据r

上面我们提到向文件中输出数据可以使用w,那么从文件中读取数据可以用r,如下图:

我们很轻松的就将

2.log

文件的数据读了出来并且插入到了

1.log

最后。

r前面可以是行数也可以是文本匹配。

这里只是sed命令的一部分,还有很多其他的用法,后续有空我再接着写!

另外,前端学习linux命令还是很有必要的,因为我们要经常使用node,它无论作为服务器还是工具都可以配合这些命令。


喜欢我的回答就关注我吧,有问题可以发表评论,我们一起学习,共同成长!

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<