ILD

sed 2: addresses
作者:Yuan Jianpeng 邮箱:yuanjp@hust.edu.cn
发布时间:2018-8-17 站点:Inside Linux Development

4 Addresses: selecting lines


4.1 Addresses overview


地址用来指定命令在哪些行执行。没有指定地址的话,则命令应用到所有行。


用行号指定, 地址行号从1开始。

sed '144s/hello/world' 


通过正则表达式匹配来指定,如下apple是匹配行的正则表达式。

sed '/apple/s/hello/world'


通过行号区间匹配

sed '4,17/s/hello/word/'


在地址后面跟一个!,表示选取相反的行。


4.2 Selecting lines by number


number 指定行

$ 最后一行


first~step 

匹配first + (n*step)行。


4.3 selecting lines by text matching


/regexp/


\%regexp%

%也替换为别的符号,当表达式本身含有很多斜杠时很有用。注意s命令的分割符要和这个分隔符一样。


也可以有修饰符I, M,不关心大小写和多行模式。


如下,匹配a的行,不关新大小写。

1
2
3
4
5
sed /a/Is/b/c/
ab
ac
Ab
Ac


4.4 Range Addresses


用逗号分开的两个地址,最简单的如

1
2
3
4
seq 10 | sed -n 4,6p
4
5
6


第二个地址,如果是正则表达式,从起始行号开始,直到正则表达式匹配的行。

1
2
3
4
5
6
seq 10 | sed -n 2,/6/p
2
3
4
5
6

如果正则表达式,从起始地址之后,未匹配,则一直匹配到文件结束。正则表达式从起始行的下一行开始匹配。起始行可以为0,则正则表达式从第一行开始匹配。


第二个地址,可以为+N。表示匹配起始行,以及其后的N行。


第二个地址可以为,~N。表示匹配起始行到结束行,结束行是起始行之后的第一个N的整数倍行号。


参考

sed manual

Copyright © insidelinuxdev.net 2017-2021. Some Rights Reserved.