0

再次询问有关 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”部分、标签“java”和“c++”中的 L2 符号后将值从 0 更改为 1?这个变体对我不起作用:

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

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

4

2 回答 2

3

你可以试试这个,

sed '/start host1/,/end host1/{s/\(host1,def,java,es,dev \)L2,0/\1L2,1/g}' file
于 2013-04-23T14:03:51.583 回答
0

像这样让你开始的东西:

awk -F, -vOFS=',' '/host1,def,java,es,dev L2/{$6=1}1' input
于 2013-04-23T14:03:58.707 回答