SED命令
SED的英文全称是 Stream EDitor,它是一个简单而强大的文本解析转换工具。
原理
- 读一行到缓存区处理(模式空间)
- 执行sed命令
- 输出结果接着继续处理下一行(重复此流程直至结束)
用途
- 文本替换
- 选择性的输出文本文件
- 从文本文件的某处开始编辑
- 无交互式的对文本文件进行编辑等
命令格式
1 | sed [option] command files |
在SED中使用的命令会作用于文本数据的所有行。如果只想将命令作用于特定的行或者某些行,则需要使用 “行寻址” 功能。
行寻址两种形式:
1 | 1.以数字形式表示的行区间 |
操作符 + , ~
加号(+)操作符,它可以与逗号(,)操作符一起使用
1 | # 从第二行开始下4行 |
使用波浪线操作符(~)指定地址范围,它使用M~N(步长)的形式,告诉SED应该处理M行开始的每N行。
1 | # 50~5匹配行号5,10,15等 |
sed操作不影响源文件,可用重定向覆写源文件.
sed操作命令
打印命令 p
打印命令p通常和-n选项配合
1 | # 打印1~10行 |
插入命令 a/i
1 | # 第五行后插入hello |
替代 c
1 | # 第四行替换成hi |
删除 d
1 | # 删除第十行 |
替换 s
1 | # false 替换成true |
执行多条命令 { ;}
1 | # 多条命令使用{},命令间用分号分隔 |
读取下一行到模式空间里去 n
1 | # false 替换成true |
h: 将当前模式空间的内容保存到保存空间
H:将当前模式空间中的内容追加到 保持空间
g : 将保持空间复制到模式空间
G: 将保持空间附加到模式空间
x:用于交换模式空间和保持空间中的内容
跳转 b
1 | # 类似goto跳转 |
创建分支 t
1 | # 创建分支;只有当前置条件成功的时候,t 命令才会跳转到该标签 |
替换字符 &
1 | # & 为匹配的字符 |
大小写转化 \u \U \l \L
1 | # & 为匹配的字符 |
字符一对一转化 y
1 | # [address]y/inchars/outchars/ |
显示隐藏字符命令 l
1 | # [address1[,address2]]l [len] |
真正匹配引用 \x
1 | # () () () ... \1 \2 \3 ...用\x表示前面的括号内容 |
复制指定文件内容到匹配行 r
1 | # 读取文件内容显示到指定行 |
将匹配行写入到文件中 w
1 | # 将demo.txt第一行写入到a.txt中 |
执行外部命令 e
1 | # e 执行外部命令 比如 date |
排除命令 !
1 | # 匹配Paulo的行不打印 |
输出行号 =
1 | # [address1[,address2]]= |
退出sed q
1 | # 执行完第10行退出 |
多行命令 P,D,N
1 | # N:将数据流中的下一行加进来创建一个多行组来处理,N并不会清除、输出模式空间的内容,而是采用了追加模式 |