追求卓越,成功就会在不经意间追上你
全部博文(112)
分类: Python/Ruby
2011-05-08 18:13:46
例说sed
sed:stream editor
流线型,非交互式的编辑器。它每次只处理一行文件并把输出打印到屏幕上。
Pattern space: 模式空间即存放当前正在处理的行的缓存空间。 一旦处理工作完成,sed就会把结果输出到屏幕,然后清空模式空间并把下一行读入模式空间,进行相关处理;直到最后一行。
sed是无破坏性的,它不更改原文件,除非你使用重定向保存输出结果。
对于一行文本,sed命令是依次执行的,如果有多个命令的话。这时,要注意各命令之间可能产生的相互影响。
对于多个sed命令,我们可以用“{}”把它们括起来。但要注意,右花括号一定要单独成行。
sed命令后不能有空格,前面则无所谓。
我们可以把一系列的sed命令写入文件中并用sed 的-f选项调用
好啦,打住先(没提到的后面都会有例子说明的,嘿嘿)
首先,我们来看看sed的语法及寻址方式:
语法:
sed [options] 'command' filename(s)
寻址方式:
1.单行寻址:[line-address]command;寻找匹配line-address的行并进行处理。
2.多行寻址: [line-address1,line-address2] command;寻找在两个地址之间的内容并做相应的处理
3.缺省:表示当前行
接下来,瞧瞧sed的一些命令和选项
sed选项:
选项 |
功能 |
-e |
允许多次编辑 |
-f |
跟随脚本文件名 |
-n |
禁止默认输出 |
sed的相关命令:
命令 |
功能 |
a\ |
向当前行添加文本行 |
c\ |
用新的文本行取代当前行里的文本 |
i\ |
在当前行之前插入文本 |
d |
删除行 |
h |
把模式空间内容复制到一个固定缓存 |
H |
把模式空间内容添加到一个固定缓存 |
g |
把固定缓存里的所有文本都复制到模式缓存,重写模式缓存的内容 |
G |
把固定缓存里的所有文本添加到模式缓存 |
l |
列出不打印的字符 |
p |
打印行 |
P |
多行打印,输出多行模式空间里的第一部分,直到第一个嵌入的换行符为止 |
n |
输出模式空间的内容并读取下一行 |
N |
读取新的输入行并将其添加到模式空间的现有内容之后来创建多行模式空间 |
q |
结束或退出 |
r |
读入行,从某个文件 |
! |
把命令应用到选定行之外的其它所有行 |
s |
替换 |
替换标志:
标志 |
功能 |
g |
全局替换 |
p |
打印 |
w |
把行写到文件中 |
x |
交换;用模式空间的内容交换固定缓存的内容 |
y |
转换,如大小写转换 |
sed支持的一些元字符:
元字符 |
功能 |
例 |
^ |
定位行开头 |
/^sed/:匹配所有以sed开头的行 |
$ |
定位行结尾 |
/sed$/:匹配所有以sed结尾的行 |
. |
匹配单个字符,不包括换行符 |
/s.d/:匹配包含一个s,后跟一个字符,再跟一个e的行 |
* |
匹配零个或多个字符 |
/*sed/:匹配的行有零个或多个空格且其后跟模式sed |
[] |
匹配集中的一个字符 |
/[Ss]ed/:匹配包含sed或Sed的行 |
[^] |
反上 |
/[^Ss]ed/:匹配的行不包含s,S且后跟ed |
\(..\) |
保存被匹配的字符 |
s/\(love\)/\1 ly/:用lovely取代love。把被标志的部分标为1,以后就能用\1引用。最多允许使用9个标记,第一个从模式的最左端开始。如上面的love就保存在寄存器1里且被记在替换串里。 |
& |
保存搜索串以便记在替换串里 |
s/sed/fuck&/:&代表搜索串sed。此例中sed将被fucksed替换 |
\< |
定位词开头 |
/\ |
\> |
定位词结尾 |
/sed\>/:匹配以sed结尾的一个词 |
x\{m\} |
字符x重复m次 |
o\{3\}:匹配的行里o要连续出现3次 |
x\{m,\} |
字符x至少重复m次 |
o\{3\,}:匹配的行里o至少要连续出现3次 |
x\{m,n\} |
字符x至少重复m次且不超过n次 |
O\{3,5\}:匹配的行里要o至少要连续出现3次但不超过5次 |
(待续)