跳转至

Linux sed 命令

1. 使用sed替换字符串

1.1 简单字符串替换

假设存在一个文件old.txt,它的内容如下:

me
good
night
yes

下面来看一下如何使用sed命令把单词night替换为day

很简单,我们在终端中运行下面的命令即可实现:

sed s/night/day/ < old.txt > new.txt

最后我们运行cat new.txt命令来查看一下new.txt文件中的内容:

me
good
day
yes

可见单词night已经被替换为day

1.2 替换所有匹配的字符串

假设我们有一个文件a.txt,其内容如下:

one two three, one two three
four three two one
one hundred

现在我们要把该文件小写的单词one全部替换为大写的单词ONE

我们在学习过1.1简单字符串替换后,可能会写出下面的命令:

sed 's/one/ONE/' < a.txt > b.txt

上面这条命令能实现我们的需求吗?我们先来执行该命令,然后查看b.txt中的内容:

ONE two three, one two three
four three two ONE
ONE hundred

经过观察我们发现并不是所有的one都被替换为了ONE,在第一行中,只有第一次出现的one被替换为了ONE,第二次出现的one并没有被替换掉,对比如下:

替换之前的第一行:

one two three, one two three

替换之后的第一行:

ONE two three, one two three

上述命令不能完全把one替换为ONE的原因

sed是以行为单位对文件进行处理的,而且默认只会替换一行中第一个匹配的值。

那么如何实现我们的需求?很简单,我们只要命令进行一点点修改,添加一个标志位g表示替换所有匹配的字符串,修改后的命令如下:

sed 's/one/ONE/g' < a.txt > b.txt

然后执行命令cat b.txt查看结果,可见所有的one已被替换为ONE

ONE two three, ONE two three
four three two ONE
ONE hundred

最后更新: 2020年11月3日