免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1904 | 回复: 5
打印 上一主题 下一主题

[文本处理] 如何增加或删除一段特定格式内容 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-27 17:11 |只看该作者 |倒序浏览
MergeConfig = {
  source = {
    {
      db_host = "127.0.0.1",
      db_name = "ss_s1",
      db_user = "test",
      db_passwd = "test123",
      prefix = "[01]",
      srv_name = "ss 1",
      new_camp = 1,
    },
    {
      db_host = "127.0.0.1",
      db_name = "ss_s2",
      db_user = "test",
      db_passwd = "test123",
      prefix = "[02]",
      srv_name = "ss 2",
      new_camp = 2,
    },
    {
      db_host = "127.0.0.1",
      db_name = "ss_s3",
      db_user = "test",
      db_passwd = "test123",
      prefix = "[03]",
      srv_name = "ss 3",
      new_camp = 3,
    }

  },
  dest =
  {
      db_host = "127.0.0.1",
      db_name = "ss_s1s2s3",
      db_user = "test",
      db_passwd = "test123",
      srv_name = "ss 1、2、3"
  }
}


比如要添加或者删除一段以下信息:

    {
      db_host = "127.0.0.1",
      db_name = "ss_s4",
      db_user = "test",
      db_passwd = "test123",
      prefix = "[04]",
      srv_name = "ss 4",
      new_camp = 4,
    }


用shell如何实现以上操作,烦请各位达人给个示例

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
2 [报告]
发表于 2013-03-27 19:14 |只看该作者
本帖最后由 cao627 于 2013-03-27 19:25 编辑

先说删除
最好能
A 明确要删除的段的标志
B 能唯指一个段的特征。

显然对于A你这里所指段是  “{” 和“}”及之间的内容。
但对于B你没说。如果能指定一个特征,事情会好办些

我假设段的特征是  db-name = "ss_s4",
即有db_name = "ss_s4",的段要删除。

明确楼A B两点用sed 和awk工具就容易删除你希望删除的段了
  1. sed  's/{/#{/;s/}/}#/'  urfile |  awk 'BEGIN{RS=ORS="#";FS=OFS="\n"}!/db_name = "ss_s4"/{print $0}' | tr  -d '#'
复制代码
上面命令中的“#”换成一个你文件中没有的字符!!

添加段的话你好多问题都没说清楚

论坛徽章:
0
3 [报告]
发表于 2013-03-28 09:09 |只看该作者
回复 2# cao627


    非常感谢这台仁兄给出解答。

    至于添加部分也是{xxx}整段内容,db_name="ss_s2" 里面的内容是根据不同的服务器信息变化的

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
4 [报告]
发表于 2013-03-28 11:35 |只看该作者
回复 3# vnline


   
db_name="ss_s2" 里面的内容是根据不同的服务器信息变化的


不懂!

我只懂些文本处理!
1.要添加段来自哪里或是怎么产生的?
2.要添加的段要添加到哪个文件的哪个位置?

论坛徽章:
0
5 [报告]
发表于 2013-03-28 13:43 |只看该作者
回复 4# cao627

比如我要在该认的里插入一段以下信息
        {
      db_host = "${ip}",
      db_name = "${dbname}",
      db_user = "${dbuser}",
      db_passwd = "${dbpasswd}",
      prefix = "${pre}",
      srv_name = "${srv}",
      new_camp = ${i},
    }

只有上面变量内容会变,其他均按原内容插到
source {
插入内容段的位置
},

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
6 [报告]
发表于 2013-03-28 18:25 |只看该作者
回复 5# vnline
  1. sed '/source/r insertfile' urfile
复制代码
source       能唯一指定要插入内容的位置
insertfile    是唯一包含要插入内容的文件



   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP