sed
stream editor 顾名思义为流编辑工具。通过正则表达式匹配到行,并进行相应处理,输出新行。用于自动编辑文件。
概要
1 | sed 【OPTION】 ... {script-only-if-no-other-script} {input-file} ... |
sed如何工作
sed维护两块内存空间,_pattern space 和 _hold space 初始都为空。
sed从输入流中读取一行,删除掉换行,然后把他放到_pattern space。然后执行各个命令。把_pattern space中的内容输出到输出流中,并添加换行符号,继续处理下一行,直到文件末尾。
使用
sed工具读取给定的文件,如果没有给定文件,读取标准输入。然后根据给定的一系列命令修改输入的内容。最后把修改内容输出到标准输出中。
一个单独的命令可以通过第一个参数传递给sed。 多个命令的话, 可以通过制定-e 或者-f选项设置。所有命令按顺序应用到输入。
选项
支持如下选项:
1 | -n, --quit, --silent 静默, 只输出匹配正则表达式的行,默认的所有行都会输出 |
Address Range
执行命令可以指定行,[address] commands
指定行的格式可以如下:
- ‘NUMBER’, 指定特定行号
sed ‘$p’ sed.md - ‘First~Step’,从第几行开始,每次跳跃Step行
- ‘$’, 文件最后一行
- ‘/REGEXP/‘, 匹配REGEX的行
- ‘%REGEXP%’,匹配REGEX的行 %是分隔符
- ‘Start, end’ 指定范围
sed -ne ‘3,5p’ sed.md
sed -ne ‘1,/888/p’ sed.md // 1-匹配888
正则表达式
- ‘CHAR’ 匹配普通字符 ‘CHAR’
- 匹配前一个字符0到多个
- . 匹配任一字符
- ^ 以什么开头
- $ 以什么结尾
- [LIST] 匹配LIST中的任一字符
- [^LIST] 不属于LIST中的任一字符
- REGEXP1|REGEXP2 匹配REGEXP1或者REGEXP2
- REGEXP1REGEXP2 整串连续匹配REGEXP1, REGEXP2
- \n 匹配换行
命令
‘#’ 用来做注释的, 把命令写在文件中时使用, 用来注释
d 删除匹配的行 sed ‘/^$/d’ file
p 打印匹配的行 sed ‘3p’ file
{COMMANDS} 多个命令,使用分号分割
s 替换命令 s/REGEX/REPLACEMENT/FLAGS
sed s/2/II/ sed.md
sed s/1/I/1 sed.md
sed s/1\2/I/ sed.md
FLAGS:
- g 替换所有匹配行
- NUMBER 替换指定第几次匹配的行
- p print new pattern space
- w FILE_NAME 匹配的结果写入文件
- r FILE_NAME 读取文件插入到匹配的行
- & 前面匹配的字符 sed ‘s/222/xxx &/‘ sed.md! 表示命令对不匹配的行生效
命令最好使用单引号包含起来
返回值
执行成功返回0, 出错返回 >0
示例
1 |
|
以上是常用的一些命令, 还有许多其他命令,更多内容建议参考’man sed’
网络上有一篇博客写的挺详细的, 链接
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。