Linux/Linux 下使用 sed 批量替换文本内容
sed 命令的全名是 stream editor,是 Linux 上非常强大的流编辑器,适用于对文本的行内容进行处理。 下面是一个例子:
在Test.java
文件中有 3 行代码,如上图所示,想要把每行开头的Str
替换为String
,使用sed 's/^Str/String/' Test.java
,其中s
表示进行字符串处理,三个反斜杠/
是分隔符(也可以使用其他分隔符,如#
),第一个反斜杠和第二个反斜杠之间表示行中需要替换的字符串,^Str
表示以Str
开头的字符串,第二个反斜杠和第三个反斜杠之间表示替换后的字符串。
但是此时替换后的文本只是输出到了终端中,并没有保存到文件中。如果需要把修改保存到文件中,可以使用 -i 参数:sed -i 's/^Str/String/' Test.java
。 如果要把每行最后的.
替换为;
,则使用sed -i 's/\.$/\;/' Test.java
,由于,
和;
在 sed 中都是特殊字符,因此需要转义。 如果想要把Jack
替换为me
,使用sed 's/Jack/me/' Test.java
结果如下:
可以看到第二行除了首个Jack
被替换成me
以外,后面两个Jack
没有被替换,sed 默认只替换每一行首个符合条件的字符串,如果需要进行全文替换,则要加上g
选项:sed 's/Jack/me/g' Test.java
sed 不仅可以对文本内容进行批量替换,还可以根据规则批量删除内容。 比如sed -i '/^ *$/d' Test.java
的作用是删除文本中的空行,sed -i '/String/d' Test.java
的作用是删除文本中包含String
的行。