首页 > 代码库 > sed 命令编辑文本
sed 命令编辑文本
1.sed 概述
sed 是一个非交互式文本编辑器,它可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘输入、文件重定向、字符串、变量,甚至来自于管道文本。
2.sed工作流程简述
sed在处理文件的时候,从一个文本行或标准输入读取数据,被保存到在一个叫模式空间的临时缓冲区中,除非被删除或者输出被取消,否则所有被处理的行在执行完sed命令后都将打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。
3.sed的缓冲区
模式缓冲区:模式空间的缓冲区,被sed命令处理。
保持缓冲区:与模式缓冲区数交换或者暂存,默认值为空行
模式缓冲区与保持缓冲区的之间的命令有两类:替换和追加(替换命令为小写字母,追加命令为大写字母)
替换:模式缓冲区 -> 保持缓冲区 h (将模式缓冲区的内容复制到保持缓冲区,替换保持缓冲的内容)
保持缓冲区 -> 模式缓冲区 g
追加: 模式缓冲区 -> 保持缓冲区 H(将模式缓冲区的内容追加到保持缓冲区)
保持缓冲区 -> 模式缓冲区 G
4.sed调用方式和选项
- sed [选项] ‘sed 命令‘ 输入文件 (命令行调用sed)
- sed [选项] ‘sed 命令‘ -f sed脚本文件 输入文件 (sed命令插入脚本文件后,然后通过sed命令调用它)
- 不管哪种调用方式,如果没有指定输入文件,sed将从标准输入中接受输入。
选项 | 意义 |
-n | 禁止自动打印模式缓冲区 |
-e | 表示将下一个字符串解析为sed编辑命令 |
-f | 表示正在调用sed脚本文件 |
5.sed命令
sed命令通常由两部分组成:定位文本行和sed编辑命令。
1)定位文本行:使用行号,指定一行或指定行号范围;使用正表达式。
选项 | 意义 |
x | x为指定行号 |
x,y | 指定从x到y的行号范围 |
/pattern/ | 查询包含模式的行 |
/pattern/pattern/ | 查询包含两个模式的行 |
/pattern/,x | 从与pattern的匹配行到x号行之间的行 |
x,/pattern/ | 从x号行到与pattern的匹配行之间的行 |
x,y! | 查询不包括x到y行号的行 |
sed元字符集:
- ^
锚定行的开始 如:/^sed/匹配所有以sed开头的行。
- $
锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
- .
匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
- *
匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
- []
匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
- [^]
匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
- \(..\)
保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
- &
保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
- \<
锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。
- \>
锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
- x\{m\}
重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
- x\{m,\}
重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
- x\{m,n\}
重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行
- 2)sed编辑命令
sed编辑命令表 选项 意义 p 打印匹配行 = 打印文件行号 a\ 在定位行号之后追加文本信息 i\ 在定位行号之前插入文本信息 d 删除定位行 c\ 用新文本替换定位文本(行) s 使用替换模式替换相应模式 r 从另一个文件中读取文本 w 将文本写入到一个文件 y 变换字符(以单个字符替换对应的字符) q 第一个模式匹配完成后退出 {} 在定位行执行命令组与 -e选项功能相近 n 输出模式缓冲区行,读取下一行替换模式缓冲区行,执行下一条命令,并非第一条命令 h 模式缓冲区的文本复制到保持缓冲区 H 模式缓冲区的文本追加到保持缓冲区 g 保持缓冲区的文本复制到模式缓冲区 G 保持缓冲区的文本追加到模式缓冲区 x 互换模式缓冲区和保持缓冲区的内容