温故而知新:使用vi或者sed替换文本文件中内容

这两天遇到一个小麻烦,一个脚本中用的网址失效了(迁移到另外一个网址),而这个网址在脚本中被多次使用,所以如果修复这个脚本是一个问题。

image.png
(图源 :pixabay)

当然了,在Windows下,无论是记事本还是其它一些文本编辑工具都可以用搜索替换功能来解决,但是把Linux下的脚本拿到Windows下来修改,岂不是很没面子。

其实Linux是替换文件中的内容也很简单,我知道了无论是vi还是sed都完全可以胜任,我们来看看都如何操作。

使用vi

使用vi替换文件中所有符合的内容,写法如下:

:%s/foo/bar/g

如果只替换当前行中的内容,那么把%去掉
如果只替换当前行中第一处对应内容,那么就把%g都去掉。
如果替换指定范围的行中的内容,那么把%换成{START},{END}对应行号。
更多更详细的内容大家去参考手册吧,我就不啰嗦了。

这里唯一要注意的是,因为网址中会有/,和替换表达式中的分隔符/一样,所以我们需要使用转义字符\对其进行转义。

好,下面我们来实际操作一下,假设有如下文本:

Reveal spoiler

image.png

我们需要将其所有https://aaa.com/aaa/网址修改为https://bbb.com/bbb/后边文件名不变。

经过分析,我们写出如下指令:

:%s/aaa.com\/aaa/bbb.com\/bbb/g

执行上述指令:

Reveal spoiler

image.png

使用sed

除了使用vi我们还可以使用sed替换文件中的内容,具体语法什么的我就不多说了,大家参考手册就好。

同样是针对上边的文本,我们可以使用如下指令来替换文本文件中的指定内容:

sed -i "s/aaa.com\/aaa/bbb.com\/bbb/g" test.txt

试了一下,用手工耿常说的一句话:“非常地好用!”

image.png
(图源 :pixabay)

有了上述基础,我遇到的问题就不算问题了,无论是使用vi撸起袖子直接干还是使用sed都能完美地解决我的问题。不用再复制到Windows下来搞啦。

当然了,搞之前,备份一下还是一个好习惯,以免把内容搞坏了,再搞不回来,就热闹啦。

Sort:  

O哥,你这级别已经81了
最高级别会是100吗?

越往后边升级越难哦

我要努力进入70,努力


Good explanation@oflyhigh

Thank you.