sed
是一个强大的流编辑器,它在 Linux 和 Unix 系统中被广泛用于文本处理。sed
可以执行多种文本转换操作,如替换、删除、插入和修改等。它的名字来源于 "stream editor"(流编辑器)。
下面是 sed
命令的一些基本用法和选项:
基本语法
sed [选项] '脚本' 文件...
选项
:控制sed
的行为。脚本
:包含要执行的命令。文件...
:指定要处理的一个或多个文件。
如果省略了文件名,sed
会从标准输入读取数据。
选项
-n
:静默模式。只打印经过脚本处理后的行。-e script
:添加脚本到已有的命令列表中。-f file
:从文件中读取脚本。-i[SUFFIX]
:直接修改文件内容;可选的 SUFFIX 参数用来备份原文件。-r
或--regexp-extended
:使用扩展正则表达式。
地址和范围
- 数字:指定行号。
/pattern/
:匹配特定模式的行。start, end
:指定起始行和结束行。$
:最后一行。%
或不指定地址:表示所有行。
常见命令
p
:打印匹配行。d
:删除匹配行。s/pattern/replacement/flags
:替换匹配的模式。flags 可以是:g
:全局替换每一行中的所有匹配项。1
:仅替换每行的第一个匹配项(默认)。i
:忽略大小写。w filename
:将替换的结果写入另一个文件。
a\
:在指定行后追加文本。i\
:在指定行前插入文本。c\
:更改指定行的内容。y/source/dest/
:字符翻译。
示例
-
替换文件中所有的 "old" 为 "new" 并显示结果:
sed 's/old/new/g' filename
-
直接在文件中替换 "old" 为 "new":
sed -i 's/old/new/g' filename
-
删除第 5 行:
sed '5d' filename
-
在每行前添加一行文字:
sed 'i\This is a new line.' filename
-
打印第 1 到第 3 行:
sed -n '1,3p' filename
-
使用扩展正则表达式替换:
sed -r 's/(old|ancient)/new/g' filename
-
将输出重定向到另一个文件:
sed 's/old/new/g' filename > newfile
这只是 sed
功能的一部分,实际上它可以非常灵活地进行复杂的文本处理任务。学习 sed
的最好方式是通过实际例子和实践来掌握其各种功能。