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\}/ |