sed编辑器简介
sed编辑器,又称流编辑器,是一个“非交互式”的面向字符流的编辑器。它能够同时处理多个文件的多行内容,既可以直接修改文件内容,也可以不对原文件改动,将修改后的数据发送到STDOUT。
sed编辑器的选项包括:
- -n:只打印模式匹配的行
- -e:在命令行模式上进行sed动作编辑,为默认选项
- -f:将sed的动作写在一个文件内,用–f filename执行filename内的sed动作
- -r:支持扩展表达式
- -i:直接修改文件内容
sed编辑器的编辑命令包括:
- a:附加新行
- i:插入新行
- c:修改整行文本
- d:删除文本行
- p:打印行内容
- s:替换文本模式
- g:全局替换
- y:字符转换
- q:完成替换后退出
- w:向文件写入行
- r:从文件插入数据
- =:打印行号
- l:列出文本内容
- {...};{...}:多命令分组执行
使用sed编辑器查询文本的方法有:
- 以数字形式表示行区间
- 使用文本模式过滤行,格式:/pattern/command
- 使用正则表达式
正则表达式基础:
- 特殊字符:.*[]^${}\+?|()
- 锚字符:^匹配行首,$匹配行尾,^$匹配空白行
- 点号字符:.匹配除换行符外的任意单个字符
- 字符组:使用方括号定义,[]匹配指定范围内的任意单个字符,[^]匹配指定范围外的任意单个字符
- 区间:匹配指定范围内的字符,使用方括号定义
- 特殊字符组:[[:alpha:]]匹配字母,[[:alnum:]]匹配字母数字字符,[[:blank:]]匹配空格或制表符等
- 星号字符:匹配字符出现0次或多次,用于匹配任意数量的任意字符
扩展正则表达式:
- {}指定可重复的正则表达式上限
- ?匹配前面字符0次或1次
- +:匹配前面字符1次或多次
- |逻辑OR方式指定多个模式
sed编辑器进阶:
- 多行命令:N合并文本行,D删除多行组中的行,P打印多行组中的行
- 分支:b [address]跳转到标签为 [label] 的行,若无label则跳转到脚本末尾
- 模式替代:使用&符号代表模式匹配,圆括号定义子模式,特殊字符引用子模式位置
sed编辑器保持空间:
- 模式空间用于保存待检查的文本
- 保持空间用于临时保存部分行,使用h、H、g、G、x命令操作
使用示例:
- 合并文本行:N命令将发现第一个单词的那行和下一行合并,便于查找多行文本
- 多行删除命令:D删除模式空间中的第一行,结合N命令处理多行数据
- 多行打印命令:P打印多行模式空间中的第一行,与单行p命令类似
总结:sed编辑器提供强大的文本处理功能,通过正则表达式、多行命令、分支等特性,可以实现复杂的数据过滤和文本替换操作。保持空间的使用更增加了灵活性,允许在文本处理过程中灵活移动和保存数据行。