- 论坛徽章:
- 5
|
本帖最后由 blackold 于 2011-06-28 12:06 编辑
回复 5# yinyuemi
1. 这是正常情况,不说了。
2.
<a> "特殊的正常情况"。
<b> 正常情况。
<c>
第三行为什么还输出?
真正的原因不好说,看了源码才知道。
看起来是这样:
对于 'NUMBER,ADDR2' 这样的地址对,有且仅有一个范围与之匹配成功,就好像是一
旦匹配成功了,sed就将该地址对从脚本中删除了,后续行没有匹配该地址对的机会。
地址对就像非诚勿扰中的女生,一旦被一个流氓领走了,下一个流氓就没有机会了。
读入第3行时,第一个-e选项的参数 1,2已经"被sed删除了"。第3行尝试执行第二个-e的参数(命令)。
另外,如果当前行行号大于NUMBER(ADDR1)时,看作是匹配成功——开启范围。
因为,3>=1 所以第3行匹配"1,2"地址对,于是d了第3行。
再有, 如果ADDR2是个数字 NUMBER2,当 NUMBER2 <= 开启范围的行号时,那么只匹配一行——即开启范围的行。see gsed man
在这里开启范围的行为第3行,而NUMBER2为2。因此只匹配第3行就关闭了范围
读入第4行时,相当两个-e的参数都"被sed删除了",所以会输出。
awk的地址对与sed不完全相同,这点要注意。
例子:- $ seq 6 |sed -n '2,3p'
- 2
- 3
- $ seq 6 |sed -n '2,2p'
- 2
- $ seq 6 |sed -n '3,2p'
- 3
复制代码
- $ cat urfile
- 1
- 2
- 1
- 3
- 1
- 4
- $ sed '0,/1/{/1/s//@/}' urfile
- @
- 2
- 1
- 3
- 1
- 4
- $ sed '0,/1/b;0,/1/{/1/s//@/}' urfile
- 1
- 2
- @
- 3
- 1
- 4
- $ sed '0,/1/b;0,/1/b;0,/1/{/1/s//@/}' urfile
- 1
- 2
- 1
- 3
- @
- 4
复制代码 |
评分
-
查看全部评分
|