一、命令简介
sed
(stream editor)是一个强大的文本处理工具,它能够执行基本的文本转换,如替换、删除、插入和修改文本行的特定部分。sed
命令通常用于对文本文件进行批量编辑,也可以用于处理来自管道的输入。
特点:
- 支持正则
- 批量处理
- 非交互式
- 每行处理
标签: 文本处理, shell 编程
获取帮助:sed --help
视频教程:
Shell 其实很简单(33)sed 的基本使用_哔哩哔哩_bilibili
sed
的用法比较多样(复杂),通过视频演示更容易理解,同时也需要动手练习,最后通过笔记总结。
二、命令参数
sed [选项] 匹配模式 文件
常用选项
-
-e
或--expression
:添加一个编辑命令到脚本。 -
-f
或--file
:从文件中读取编辑脚本。 -
-n
或--quiet
或--silent
:抑制自动打印。 -
-i
或--in-place
:⚠️直接修改文件,而不是输出到标准输出。必须谨慎使用。 -
-r
或--regexp-extended
:使用扩展的正则表达式。 -
--help
:查看帮助文档
匹配模式
-
s/regexp/replacement/
:替换匹配到的字符串。 -
d
:删除匹配到的行。 -
p
:打印匹配到的行。 -
a \text
:在匹配到的行后面添加文本。 -
i \text
:在匹配到的行前面插入文本。 -
c \text
:替换匹配到的行为指定的文本。
三、命令示例
-
sed '/模式/命令' 文件
模式:处理整行# 删除:删除井号开头的行 sed '/^#/d' txt # 删除不匹配的行:删除不是井号开头的行 sed '/^#/!d' txt # 多命令:删除井号开头的行,删除空行 sed '/^#/d; /^$/d' txt # 追加:在匹配的行后面插入一行内容 sed '/^#/a #上一行是注释,这一行也是注释' txt # 插入:在匹配的行前面插入一行内容 sed '/^#/i #下一行是注释,这一行也是注释' txt # 替换行:替换掉匹配行的内容 sed '/^#/c #这是一条重新编辑后的注释' txt # 导入文件:匹配行写入指定文件 sed '/^#/w txt2' txt # 在每个匹配到的行前插入(一行来写)行号 # 鸡肋,可能不是你预期的样子:行首插入行号 sed '/^#/=' txt # 删除单行 sed '3d' txt # 删除多行(第3到第5行) sed '3,5d' txt # 将text文件的内容插入到txt文件的第二行 sed '2r text' txt # 打印匹配行 sed -n '/^[^#]/p' txt
以上操作不会修改你的源文件,它只会把结果输出在终端上。
-
s/查找/替换/
模式:处理行中的匹配字串# 替换每行第一个匹配字符串 sed 's/hello/world/' txt # 全局替换 sed 's/hello/world/g' txt # 仅显示替换后的行 sed -n 's/hello/world/gp' txt # 引用模式 &:匹配的字符串 sed -n 's/world/&!/gp' txt # 自定义分隔符 sed -n 's#hello#Hello#gp' txt # 基础正则表达式 sed 's/[0-9]\+/x/g' txt # 拓展正则表达式 减少转义 sed -r 's/[0-9]+/x/g' txt
以上操作不会修改你的源文件,它只会把结果输出在终端上。
-
⚠️谨慎使用
-i
选项: 因为它真的会修改你的源文件。# 替换:hello被替换为world sed -i 's/hello/world/g' txt
输出示例
注意事项:
- 原地编辑:使用
-i
选项进行原地编辑时,建议先备份文件,以防意外修改。 - 正则表达式:
sed
默认使用基础正则表达式,若需要使用扩展正则表达式,可以添加-r
选项。 - 文件处理:
sed
是一行一行处理文本的,对于大文件可能效率较低。 - 语法注意:
sed
的语法和操作符可能会因不同版本而略有差异,需注意兼容性。 - 熟练掌握
sed
命令可以提高文本处理效率,但在操作时应注意备份重要文件,避免意外修改。
sed
是一个非常灵活的工具,能够执行复杂的文本处理任务。掌握 sed
可以大大提高在命令行环境中处理文本的效率。