一、简介
- sed(Stream editor)是一个功能强大的文本流编辑器,主要用于对文本进行处理和转换。
- 它适用于自动化处理大量的文本数据,能够支持诸如查找、替换、删除、插入等文本编辑操作。
- sed是非交互式的,即它不会改变原始文件,除非显式指定。
二、sed基本用法与常用参数
- 语法结构:
sed [addr]x[options] 'expression' file
-
addr
:指定操作的行范围,可以是具体行号或匹配的模式。 -
x
:表示编辑命令,如s
(替换)、d
(删除)、p
(打印)。 -
options
:用于指定额外的操作,如-e
、-n
、-i
等。
-
2.1 sed常用选项与参数
表达式 | 描述 |
---|---|
-e | 在同一个命令中执行多个sed表达式。 |
-n | 静默模式,取消默认的自动输出行为,只有手动指定p(打印) 时才会输出。 |
s | 用于替换文本,基本语法为sed 's/pattern/replacement/' file
|
-i | 直接修改文件,不输出到标准输出 |
-E | 扩展正则表达式(ERE) |
--debug |
调试模式,显示每一行的处理结果 |
2.2 pattern表达式
1. 行数与行数范围匹配
在 sed
中,可以指定单行或多行进行操作。
-
指定单行:匹配特定行进行编辑操作。
sed '20p' file.txt
-
指定行范围:通过行号范围操作一系列行。
sed '30,35d' file.txt
-
从某行到文件末尾:
sed '20,$d' file.txt
2. 正则表达式匹配
sed
可以使用正则表达式来匹配某一行或多行,/pattern/
表示匹配某个正则模式。
-
匹配包含模式的行:
sed '/pattern/p' file.txt
-
删除匹配行:
sed '/error/d' file.txt
-
替换匹配行:
sed '/hello/s/world/universe/' file.txt
3. 区间匹配
通过指定两个匹配模式的范围,sed
可以操作特定区间的行。格式为 //,//
。
-
指定模式的区间匹配:
sed '/start/,/end/p' file.txt
-
删除区间匹配的行:
sed '/BEGIN/,/END/d' file.txt
-
对区间进行替换:
sed '/start/,/end/s/foo/bar/' file.txt
4. 多个匹配条件
可以使用逗号 ,
来结合行号或正则表达式,以灵活匹配行数和模式。
-
按行号和正则结合:
sed '10,/pattern/d' file.txt
-
多行范围和模式结合:
sed '20,40s/foo/bar/' file.txt
2.3 sed action表达式
参数 | 描述 |
---|---|
p | 打印,通常结合-n参数:sed -n '2p'
|
s | 查找替换,s/REGEXP/REPLACEMENT/[FLAGS]
|
d | 删除,删除前两行:sed '1,2d'
|
a | 追加 |
c | 改变 |
i | 插入内容到匹配行之前 |
e | 执行命令 |
分组匹配 与字段提取 |
`sed 's#([0-9]) |
2.4 行数操作
- 打印特定行:
sed -n 2p
- 删除最后一行:
sed $d
2.5 s表达式
- s表示替换;
- s后面的追加字符可以为任意字符;
- g表示全局匹配;
- &表示匹配内容。
2.6 反向引用
- 使用
()
对数据进行分组; - 使用
\1 \2
反向引用分组。