0

我在unix上有这样的日志文件:

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


##c++ serv
host1,def,ESServer,es,dev L2,1,dev w,fr
host1,def,ESServer,es,dev L3,0,dev w,fr
host1,def,ESServer,es,dev M1,1,dev w,fr
host1,def,ESServer,es,dev M4,1,dev w,fr
host1,def,ESServer,es,dev N1,0,dev w,fr
host1,def,ESServer,es,dev M5,1,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”之间的所有字符串中将值从 1 更改为 0。例如:

#######################################
################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##############
#######################################

那么,是否可以在 SED 上编写正则表达式?我会尝试写,但无法理解如何继续... 这个表达式将所有值从 1 更改为 0

sed 's/,0,/,1,/g' file

更新。

谢谢大家!现在它发生了变化,但是如果我想在 host1 中更改标记 java 或 c++ 中的值?像这样的东西: sed '/start host1//c++/,/end host1/s/,0,/,1,/g' file

4

2 回答 2

0

试试看:

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

/start host1/是一个起始地址/end host1/是一个结束地址。

请参阅Sed 手册

于 2013-04-22T13:39:17.910 回答
0

尝试这个:

sed '/^host1/s/,0,/,1,/g'

仅替换以 host1 ( ) 开头的行/^host1/,其余您注明的替换很好

于 2013-04-22T13:43:55.910 回答