SED是Stream EDitor的缩写,也就是SED是一个流编辑器。它的处理方式和Gvim/emacs完全不一样。更多的是将SED用作文本处理而不是文本编辑。
一般linux系统都会内置SED命令。输入sed会打印出help信息。从help信息可以看到其用法如下:
sed [options]... 'command' files...
sed的options说明:
-n : 等效- -quiet,- -silent,静默模式,取消自动打印模式空间
-e ‘expr’: 等效 - -expression= ‘expr’,将脚步表达式添加到运行列表。
-f srcipt.f : 等效- -file= srcipt.f.添加脚本文件到运行列表
-i: 等效- -in-place,直接修改文件
-r: 脚步中开启扩展正则表达式支持
上述为主要的选项说明,其他的选项可查看help得到详细信息。
SED以行为单位进行处理,当前处理的行存放在临时缓存区,称为模式空间(pattern space),sed依次处理模式空间内容,并输出到终端,如此循环直到处理完所有的行。
为了只对感兴趣的行进行处理,需要使用定址,定址:定位到想要编辑的行,如1,5表示1到5行,/test/ 匹配到test的行。定址可以使用数字和正则表达式匹配并且可以混合使用。
a\:当前行加入一行。eg
sed '$a\\#this is the end' test.txt
其中 ’$’匹配最后一行,‘\’使用需要进行转义。命令会在文件最后一行后添加注释’#this is the end’
i\:当前行前加入一行。eg
sed '1i\\#add a header' test.txt
d:删除。eg
sed '2,$d' test.txt
除了第一行外,其他行被删除
p:打印。默认sed会将模板空间打印到终端,因此使用’p’命令会打印两次。需要结合-n选项进入静默模式,则只打印定址的或匹配的行。
s/re/sting: 替换命令,用string的字符串替换正则表达式re。
g:行内全面替换。eg
sed 's/PATH/path/g' test.txt
将所有的PATH替换成path。
r:读文件
sed '1r include.h' include.c
将文件include.h的内容添加到include.c的第一行下面。
w:写文件
sed '1w include.h' include.c
将include.c的第一行写入到include.h。
^:行首
$:行尾
.:任意一个字符
*:0个或多个字符
[]:指定范围字符
[^]::不在指定范围字符,取非操作
(..):保存匹配字符
&:搜索匹配字符串保存值。eg:
s/david/hello & /
将david替换为hello david
\<:词首
>:词尾
x{m}:重复x字符m次。
x{m,}:重复x字符最少m次。
x{m,n}:重复x字符m~n次。