开篇词
我们可以使用 Linux 提供的 sed
流编辑器来逐行过滤及转换文本。
sed
命令选项
这里是 sed
命令的一些选选项。
选项
选项 | 用途 |
---|---|
-n 或 --quiet 或 --slient | 忽略自动输出。 |
-e script 或 --expression=script | 添加脚本。 |
-f script-file 或 --file=script-file | 添加脚本文件内容。 |
-r 或 --regexp-extended | 使用扩展正则表达式。 |
命令
零- 或 一- 地址命令
命令 | 用途 |
---|---|
a \text | 在指定行后追加文本。 |
i \text | 在指定行前追加文本。 |
r filename | 从文件名追加文本。 |
接受地址范围的命令
命令 | 用途 |
---|---|
c \ | |
d | 删除匹配的行。 |
p | 输出匹配的行。 |
s/regexp/replacement/ | 将内容替换成 regexp 通过 replacement 内容来匹配到的内容,在末尾追加 g 意思是全局匹配,在末尾追加 i 意思是无视大小写。 |
w filename | 将指定内容写至文件名。 |
地址
地址 | 用途 |
---|---|
number | 匹配指定行号。 |
first~step | 匹配以 first 行开始的每一 step 行。 |
$ | 匹配末行。 |
/regexp/ | 输出匹配正则表达式的行。 |
addr,addr2 | 输出从 addr1 至 addr2 行的内容。 |
addr1,-N | 输出从 addr1 至 N 行的内容。 |
例子
在开始之前,我们准备一些测试内容:
printf '%s\n' \
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam nisi tellus,' \
'egestas sed dolor nec, eleifend venenatis mi. Mauris ac ligula' \
'scelerisque libero interdum varius. Aenean nec arcu nec turpis' \
'commodo mollis. Morbi suscipit felis libero, eu sollicitudin justo' \
'condimentum id. Praesent eu metus rutrum, varius leo malesuada,' \
'varius sapien. Vestibulum blandit, dolor bibendum bibendum ultricies,' \
'ipsum velit pretium arcu, eu maximus augue massa vitae justo. Etiam' \
'elit sapien, placerat quis libero a, tincidunt ornare erat. Praesent eu nibh' \
'ac sem mattis tincidunt. Aliquam erat volutpat. Nulla egestas dui ac urna' \
'convallis, vel egestas lectus ultrices. Morbi sit amet quam eget tortor' \
'laoreet laoreet id non libero.' > sed_file
从第一行配至第五行
sed -n '1,5p' sed_file
匹配末行
sed -n '$p' sed_file
在第一、二及三行后追加行
sed '1,3a \A Line After Line One, Two and Three' sed_file
在末行前插入一行
sed '$i \A Line Before Last Line' sed_file
我所撰写的英文版本
58. Advanced Text Processing - Stream Editor (sed)
引用
参见
上一篇:
想看手册的其他内容?请访问该手册的所属专栏:《Linux 管理员手册:既简单又深刻》