SED更改文件中的值

时间:2013-04-23 13:52:25

标签: regex 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##############
#######################################

如何在“host1”部分中的L2符号之后将值从0更改为1,标记为“java”和“c ++”?这个变体对我不起作用:

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

另一个问题。如何仅在java标记中更改此值,并仅在“host1”部分中的c ++标记中更改此值。 提前谢谢!

2 个答案:

答案 0 :(得分:3)

你可以试试这个,

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

答案 1 :(得分:0)

这样的事情让你开始:

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