全部博文(298)
分类: Python/Ruby
2012-04-18 19:43:38
awk和sed的范围显示
转自:
题目:
1. awk '/foo1/,/foo2/'
2. sed -n '/foo1/,/foo2/p'
3. 实现的功能一样么?
解答:
两者不一样,原因如下:
不管是awk还是sed,默认下表达式/foo1/,/foo2/的布尔值为false
awk '/foo1/,/foo2/'
当/foo1/为真,表达式的布尔值为true,执行其后的action(这里是print),
同时判断/foo2/是否为真,如果为真,匹配表达式的布尔值变成false,否则,不改变表达式的布尔值,直到/foo2/匹配为真。
sed -n '/foo1/,/foo2/p'
/foo1/为真,表达式的布尔值为true,执行其后的action(p指令),
和awk不同的是,sed是在/foo1/匹配为真的下一行,才对/foo2/进行判断,也就当读入下一行时,
同样,如果/foo2/为真,匹配表达式的布尔值变成false,否则,不改变表达式的布尔值,直到/foo2/匹配为真。
示例:注意同种颜色表示同一范围内
cat file
foo1 foo2
foo2
foo1
xxx
yyy
foo2
zzz
awk '/foo1/,/foo2/' file
foo1 foo2
foo1
xxx
yyy
foo2
sed -n '/foo1/,/foo2/p' file
foo1 foo2
foo2
foo1
xxx
yyy
foo2