Sed 是一个流编辑器,它能够读取文本文件、对数据进行转换,并将结果写入到输出。Sed 是一个强大的工具,适用于各种文本处理任务,如替换、插入、删除和选择文本。
基本概念与使用方法
基本命令格式
Sed 命令的基本格式如下:
sed [选项] '命令' 文件名
读取与写入
-n
:静默模式,仅在执行某些特定操作时输出。-i
:直接修改文件内容,而不是输出到标准输出。r file
:从指定文件中读取额外的行并追加到当前输入缓冲区中。w file
:将输出写入到指定文件中。
示例
sed -n '/pattern/p' filename
该命令会打印出所有匹配 "pattern" 的行。
替换命令
基本替换
s/原字符串/新字符串/
:替换字符串。s/原字符串/新字符串/g
:全局替换,即替换每一处出现的原字符串。
示例
sed 's/old/new/' filename
这将把文件中的每一个 "old" 替换成 "new"。
使用正则表达式
Sed 支持正则表达式来定义匹配规则。
sed 's/[a-z]/X/g' filename
这将把文件中所有的小写字母替换为 "X"。
插入与追加
插入
i
:在匹配行之前插入一行。c
:替换匹配行的内容。
示例
sed '/pattern/i\New line before' filename
这将在匹配 "pattern" 的行前插入一行 "New line before"。
追加
a
:在匹配行之后追加一行。
sed '/pattern/a\New line after' filename
这将在匹配 "pattern" 的行后追加一行 "New line after"。
删除命令
基本删除
d
:删除匹配的行。
示例
sed '/pattern/d' filename
这将删除文件中所有匹配 "pattern" 的行。
范围删除
3,5d
:删除第 3 到第 5 行。3,$d
:删除从第 3 行到最后一行。
示例
sed '3,5d' filename
这将删除文件中第 3 到第 5 行的内容。
流控制
条件分支
b label
:跳转到标签。t label
:如果最近的替换成功,则跳转到标签。
示例
sed '/pattern/{s/old/new/;b}' filename
这将在匹配 "pattern" 的行中替换 "old" 为 "new" 并跳过后续命令。
更多高级用法
多次替换
可以使用多个替换命令,用分号隔开。
sed 's/old/new/;s/another/other/' filename
这将依次替换 "old" 为 "new" 和 "another" 为 "other"。
脚本文件
可以将一系列 sed 命令写入一个脚本文件,然后通过 -f
参数执行。
sed -f scriptfile filename
示例
假设 scriptfile
内容如下:
s/old/new/ s/another/other/
那么上述命令将按顺序执行这些替换命令。
总结
Sed 是一个功能强大且灵活的文本处理工具,适用于多种场景,从简单的替换到复杂的文本流控制。掌握 Sed 可以显著提高你的文本处理效率。