sed & awk 阅读笔记之sed(part 2)(转)

本篇关注于sed的command,这是sed的核心部分,决定了你能用它做什么事情。
1.基本语法
[address]command
address在上一part中已经做了详细介绍。
需要注意的是有些 command只适用于指定1个地址的情况
多行command的语法是
address {
command1
command2
command3
}
注意:每个command后面不能有空格,否则将是一个语法错误。
此外,还可以通过”;”还实现多行,即address {command1;command2;command3}
2.command:替换
文本处理最基本的一个功能
sed里面通过s来实现,它的基本语法是
[address]s/pattern/replacement/flags
flags是个可选的选项,若不写默认为1
其他flags选项有
n:(1~512),表示替换近作用于第n次出现
g:全局替换
p:打印出pattern space里的内容
w:pattern space的内容写进文件
注意:在address的格式里,必须用”/”来括住正则表达式。
而s命令的格式里,”/”不是必须的,可以用任何除
之外的符号代替,例如s!abcd!efgh!g
这样做的好处是可以实现将类似/root/abcd替换为/home/efgh,s:/root/abcd:/home/efgh:g
replacement中可以用到的特殊符号有
& 代表 pattern匹配到的内容
,代表pattern中用()匹配到的第n个模式
,可以用来跳脱 &或者newline
3.command:删除
命令d。它可以改变command的处理流程。
因为在执行了d之后,pattern space就被清空,那么d之后的command就被跳过。
下一行被读入pattern space进行下一轮的处理
4.command:append,insert and change
格式如下:
append : [line-address]a
text
insert : [line-address]i
text
change : [address]c
text
a和i只能用于单行address
5.command: list
命令l
列出pattern space里的内容,可以显示非打印字符
6.command: transform
命令y
用法例子y/abc/ABC/ ,将pattern space里所有的a转为A,b转为B,c转为C
7.command:print
命令p
打印pattern space里的内容。
当p和s结合使用的时候,仅print替换成功的行
8.command:列行号
命令=
仅能用于单行address
9.command:next
命令n,可以改变command处理流程
在多行command中,如果遇到n,则输出当前pattern space的内容
并且把下一行内容读入pattern space,接着执行下面的command
10.command:读写文件
命令r [file],将文件内容读入当前pattern space
命令w [file],将pattern space内容写入文件file
11.command:退出
命令q,停止读入新行并退出
12.advanced command: N D P
N,多行pattern space 模式
读入下一行内容append到当前pattern space当中来。
D,P对应于多行删除和多行打印,不细说了,感兴趣可以查看sed&awk原文
13.
advanced command:h/H g/G x
h/H,可以将pattern space的内容保存到hold space中,h是覆盖,H是append
g/G,可以将hold space的内容保存到pattern space中,g是覆盖,G是append
x是将hold space的内容和pattern space的内容互换
14.advanced command: b,t
控制流程的一种手段,实现类似循环等模式

posted on 2008-08-25 17:41  y轴  阅读(222)  评论(0编辑  收藏  举报

导航