2013-04-23 25 views
0

再次提到有關SED的問題。所以我的日誌文件:文件中的SED更改值

####################################### 
################start host1############ 
####################################### 
##java serv 
host1,def,java,es,dev L2,0,dev w,fr 
host1,def,java,es,dev L3,0,dev w,fr 
host1,def,java,es,dev M1,0,dev w,fr 
host1,def,java,es,dev M4,0,dev w,fr 
host1,def,java,es,dev N1,0,dev w,fr 
host1,def,java,es,dev M5,0,dev w,fr 


##c++ serv 
host1,def,ESServer,es,dev L2,0,dev w,fr 
host1,def,ESServer,es,dev L3,0,dev w,fr 
host1,def,ESServer,es,dev M1,0,dev w,fr 
host1,def,ESServer,es,dev M4,0,dev w,fr 
host1,def,ESServer,es,dev N1,0,dev w,fr 
host1,def,ESServer,es,dev M5,0,dev w,fr 
####################################### 
################end host1############## 
####################################### 

####################################### 
################start host2############ 
####################################### 
##java serv 
host2,def,java,es,dev L2,0,dev w,fr 
host2,def,java,es,dev L3,0,dev w,fr 
host2,def,java,es,dev M1,0,dev w,fr 
host2,def,java,es,dev M4,0,dev w,fr 
host2,def,java,es,dev N1,0,dev w,fr 
host2,def,java,es,dev M5,0,dev w,fr 


##c++ serv 
host2,def,ESServer,es,dev L2,0,dev w,fr 
host2,def,ESServer,es,dev L3,0,dev w,fr 
host2,def,ESServer,es,dev M1,0,dev w,fr 
host2,def,ESServer,es,dev M4,0,dev w,fr 
host2,def,ESServer,es,dev N1,0,dev w,fr 
host2,def,ESServer,es,dev M5,0,dev w,fr 
####################################### 
################end host2############## 
####################################### 

我怎麼能在一節「主機1」改變從0到1的值L2符號後,標記的「Java」和「C++」?此變體不適用於我:

sed '/start host1/,/end host1/s/,L2,0,/L2,1,/g' file 

而另一個問題。如何僅在java標記中更改此值,並且僅在「host1」部分中的C++標記中更改此值。 在此先感謝!

回答

3

你可以用這個試試,

sed '/start host1/,/end host1/{s/\(host1,def,java,es,dev \)L2,0/\1L2,1/g}' file 
0

像這樣的事情,讓你開始:

awk -F, -vOFS=',' '/host1,def,java,es,dev L2/{$6=1}1' input