用 sed 替换与删除文本行的三个常用方法

举报
yd_256822737 发表于 2026/11/10 10:00:25 2026/11/10
【摘要】 sed 是 Linux 下处理文本行的经典工具,它按行读取输入,对每一行应用你给出的编辑命令,处理完再输出,最适合写在脚本里批量修改文件。下面介绍替换、原地修改和删除行三个最常用的方法。 一、用 s/// 做替换替换的命令是 s/旧内容/新内容/,基本写法是:sed 's/apple/banana/' fruit.txt这行命令把 fruit.txt 每一行中第一个出现的 apple 换成 ...

sed 是 Linux 下处理文本行的经典工具,它按行读取输入,对每一行应用你给出的编辑命令,处理完再输出,最适合写在脚本里批量修改文件。下面介绍替换、原地修改和删除行三个最常用的方法。

一、用 s/// 做替换

替换的命令是 s/旧内容/新内容/,基本写法是:

sed 's/apple/banana/' fruit.txt

这行命令把 fruit.txt 每一行中第一个出现的 apple 换成 banana,只输出到屏幕,不改原文件。如果想把一行里所有的 apple 都换掉,在命令末尾加 g:

sed 's/apple/banana/g' fruit.txt

替换内容里如果含有斜杠,可以换一个分隔符,比如用 #,写成 sed ‘s#/old/path#/new/path#g’,可读性更好。如果只想替换每行第二次出现的内容,可以写成 s/apple/banana/2。

二、用 -i 做原地修改

上面的命令默认不改原文件,只是把结果打印出来。加上 -i 参数,sed 就会直接修改原文件:

sed -i 's/DEBUG=false/DEBUG=true/' app.conf

执行后,app.conf 里的 DEBUG=false 就被改成了 DEBUG=true。-i 是破坏性操作,改错了不容易恢复,所以动手前最好先备份,或者先用不带 -i 的命令在屏幕上看一眼结果,确认无误再加 -i 执行。也可以用 -i.bak 让 sed 自动留一个备份文件:

sed -i.bak 's/DEBUG=false/DEBUG=true/' app.conf

执行后会生成 app.conf.bak,里面是修改前的内容,相当于多了一层保险。

三、用 d 删除行

d 命令用来删除行。最常见的是按行号删除,例如删除第 3 行:

sed '3d' data.txt

删除第 2 到第 5 行,可以写成一个范围:

sed '2,5d' data.txt

按内容删除更实用。删除所有包含 error 的行:

sed '/error/d' app.log

删除空行则可以这样写:

sed '/^$/d' data.txt

其中 ^$ 匹配空行。删除行同样可以配合 -i 直接写回文件,例如 sed -i ‘/^$/d’ data.txt 会删掉文件里的全部空行。

小结

替换、原地修改、删除行这三个方法覆盖了日常文本处理的大部分场景:先用不带 -i 的命令在屏幕上确认效果,再加 -i 写回文件,是最稳妥的用法。把这几条命令记熟,写脚本批量处理日志和配置文件时会顺手很多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。