Linux/Linux 下使用 sed 批量替换文本内容

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的行。

评论