标签之间的 SED 更改值 [英] SED change value between tags

查看:42
本文介绍了标签之间的 SED 更改值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆