标签之间的 SED 更改值 [英] SED change value between tags
问题描述
我在 Unix 上有这样的日志文件:
I have log file on unix like this:
#######################################
################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.例如:
I need change value from 1 to 0, in all strings between tags "host1". For example:
#######################################
################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
So,is it possible to write regular expression on SED? I'll try to write but can't understand how to continue... This expression change all value from 1 to 0
sed 's/,0,/,1,/g' file
更新.
谢谢大家!现在它改变了,但是如果我想改变例如 host1 中标签 java 或 c++ 中的值?像这样的东西:sed '/start host1//c++/,/end host1/s/,0,/,1,/g'文件
.
Thanks all! Now it changed, but if I want change value in tag java or c++ in host1 for example?
Something like this:
sed '/start host1//c++/,/end host1/s/,0,/,1,/g' file
.
推荐答案
试试看:
sed '/start host1/,/end host1/s/,0,/,1,/g'
/start host1/
是起始地址 /end host1/
是结束地址.
/start host1/
is a starting address /end host1/
is a ending address.
请参阅 Sed 手册.
这篇关于标签之间的 SED 更改值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!