1.sed 是一种非交互编辑器,sed 是逐行处理文件,sed 把当前正常处理的行保存在一个临时的缓冲区中,这个缓冲区称为模式空间。sed处理完模式空间的行后,就把该行发送到屏幕上。sed 每处理完一行就将其从模式空间中删除。
2.sed 命令
命令 | 功能 |
\a | 在当前行后添加一行或多行 |
\c | 用新文本修改(替换)当前行中文本 |
d | 删除行 |
\i | 在当前行之前插入文本 |
h | 把模式空间里的内容复制到暂存缓冲区 |
H | 把模式空间里的内容追加到暂存缓冲区 |
g | 取出暂存缓冲区的内容,将其复制到模式空间,覆盖该处原有内容 |
G | 取出暂存缓冲区的内容,将其复制到模式空间,追加该处原有内容 |
l | 列出非打印字符 |
p | 打印行 |
n | 读入下一输入行,并从下一条命令而不是第一条命令开始对其处理 |
q | 结束或退出sed |
r | 从文件中读取输入行 |
! | 对所选行以外的所有行应用命令 |
s | 用一个字符串替换另一个 |
替换标志 | |
g | 在行内进行全局替换 |
p | 打印行 |
w | 将行写入文件 |
x | 交换暂存缓冲区与模式空间的内容 |
y | 将字符转换为另一字符(不能对正则表达式使用y命令) |
选项 | 功能 |
-e | 允许多项编辑 |
-f | 指定sed 脚本文件名 |
-n | 取消默认的输出 |
元字符 | 功能 | 示例 | 示例的匹配对象 |
^ | 行首定位符 | /^love/ | 配置所有以love开头的行 |
$ | 行尾定位符 | /love$/ | 匹配所有以love结尾的行 |
. | 配置除换行符外的单个字符 | /l..e/ | 匹配包含字母l , 后跟两个任意字符,再跟字母e的行 |
* | 匹配零个或多个前导字符 | /*love/ | 匹配在零个或多个空格紧跟着模式love的行 |
[] | 匹配指定字符组内的任一字符 | /[Ll]ove/ | 匹配包含love和Love的行 |
[^] | 匹配不在指定字符组内的任一字符 | /[^A-KM-Z]ove/ | 匹配包含ove,但ove之前的那个字符不在A至K或M至Z之间的行 |
\(..\) | 保存已匹配的字符 | s/\(love\)able/\1er/ | 标记元字符之间的模式,并将其保存为标签1,之后可以用\1来引用它。最多可以定义9个标签。在这个示例中,love被保存在寄存器1里,之后被替换串引用,结果loveable被替换为lover。 |
& | 保存查找串以便在替换串中引用 | s/love/**&**/ | 符号&代表查找串。字符串love将替换前后各加了两个星号的引用,即love变成**love** |
\< | 词首定位符 | /\<love/ | 匹配包含以love开头的单词的行 |
\> | 词尾定位符 | /love\>/ | 匹配包含以love结尾的单词的行 |
x\{m\} | 连续m个x | /o\{5\}/ | 分别匹配出现连续5个字母o,至少5个连续的o,或5~10个连续的o 的行。 |
x\{m,\} | 至少m个x | /o\{5,\}/ | |
x\{m,n\} | 至少m个,但不超过n个x | /o\{5,10\}/ |