2009-02-25

sed(2)--地址

sed的各个命令前都可以带一个地址或者地址范围(这个地址很多时候是行号)作为条件.只有当满足条件时,命令(-e或-f指定的命令)才会执行.sed的地址的指定方式有很多种:

'NUMBER', 这个方式表示,只对第NUMBER行执行sed的命令:

$ cat func.test
#!/bin/bash
function test()
{
echo hello
}
test
~$ sed -e '3=' func.test -n
3


'FIRST~STEP',这个方式表示,对FIRST+N*STEP(N是正整数)的行执行命令:

$ sed -n -e '2~2=' func.test
2
4
6


'$',这个方式表示只对最后一行执行命令:

$ sed -n -e '$=' func.test
6


/REGEXP/,这种方式表示,只有当前处理的行匹配这里指定的正则表达式才执行命令.:

$ cat func.test
#!/bin/bash
function test()
{
echo hello
}
test

~$ sed -n -e '/\(func\test\)/=' func.test
2
6


\%REGEXP%,这种方式和上面的一样,不过把上面的斜扛'/'换成了百分号'%'.这里的百分号也可以任意其他的符号.这样,正则表达式如果有很多斜扛的话,就可以少打很多转义字符:

$ sed -n -e '\@bin/bash@=' func.test
1


/REGEXP/I,在正则表达式后面加上I,表示正则表达式对大小写不敏感:

$ cat func.test
#!/bin/bash
function test()
{
echo hello
}
test

~$ sed -n -e '/TEST/I=' func.test
2
6


`/REGEXP/M',参见sed(3)--命令对s(替换)命令的M选项的讨论

`ADDR1,+N',这种方式表示从ADDR1这个地址开始,加上后面的N行:

$ sed -n -e '1,+3=' func.test
1
2
3
4


`ADDR1,~N',这种方式表示,从ADDR1这个地址开始,直到下一个行号是N的倍数:

$ sed -n -e '1,~2=' func.test
1
2

~$ sed -n -e '1,~3=' func.test
1
2
3

两个地址还可以用逗号隔开写在一起来表示一个地址范围:

$ sed -n -e '2,4=' func.test
2
3
4


用'!'可以取返,即除了"这些地址以外":

$ sed -n -e '2,4!=' func.test
1
5
6



相关文章:
sed(1)--选项
sed(3)--命令

转载请注明出处 http://fornote.blogspot.com/

没有评论:

发表评论