1
$ NAME : corry   
$$.Inc s d  
$$.Oc s 
$$.TO

G1 ty n1 EE EE M T1 T2 $$SRU   
G2 n1 y OO OO M T3 T4 $$SRU   
.EON  

$ NAME : patrick  
$$.Inc c d
$$.Oc c 
$$.TO 

G1 td n3 EE EE M T5 T6 $$SRU    
G2 n3 y OO OO M T7 T8 $$SRU  
.EON


$ NAME : danny

$$.Inc a b 
$$.Oc b
$$.TO 

@lc1 corry 
@lc2 patrick
1 to n0 EE EE M S1 S2 $$SRU
G2 n0 y OO OO M S3 S4 $$SRU   
.EON

$ NAME : sandy    
$$.Inc m n   
$$.Oc n
$$.TO   

G1 te n1 EE EE M b1 b2 $$SRU    
G2 n1 o OO OO M b3 b4 $$SRU    
.EON     


$ NAME : manager   
$$.Inc o e
$$.Oc e      
$$.TO    

@lc3 danny      
@lc4 sandy     
G1o ty n1 EE EE M T1 T2 $$SRU    
G2o n1 y OO OO M T3 T4 $$SRU   
.EON

如何在一定范围内搜索特定模式?例如,我想G1o在部分之间的范围内进行搜索$ Name : managerEnd of name (.EON)并将其替换为G1o.corry.n.

4

2 回答 2

1
perl -pe 's/G1o/G1o.corry.n/ if /\$ NAME : manager/ .. /\.EON/' file

来自perlop文档:

在标量上下文中,“..”返回一个布尔值。该运算符是双稳态的,就像一个触发器,并模拟 sed、awk 和各种编辑器的行范围(逗号)运算符。每个“..”运算符都维护自己的布尔状态,即使在调用包含它的子例程时也是如此。只要它的左操作数是假的,它就是假的。

于 2013-10-10T05:26:38.677 回答
0
sed '/^\$ NAME : manager/,/\.EON/s/G1o/G1o.corry.n/'
于 2013-10-10T08:33:01.073 回答