免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求大虾解一个修改配置文件的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-20 23:20 |只看该作者 |倒序浏览
现在需要用脚本自动自动修改多台机器的配置文件中的一个ip,格式如下:
[tag1]
version=1910
ip=1.1.1.1
port=9890

[tag2]
version=2111
ip=2.4.4.4
port=9087

.....

现在需要这个配置文件[tag2]中的ip改成0.0.0.0,请问有什么比较保险的方法么?

现在了解:

awk -v RS="[" '/^tag2]/{print $0}' exe.ini  可以取到这一部分:
tag2]
version=2111
ip=2.4.4.4
port=9087

但是如果安全的修改呢? 求指教,谢谢诶

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2013-01-21 03:01 |只看该作者
本帖最后由 yinyuemi 于 2013-01-21 03:01 编辑

awk '/\[tag2\]/{tag=2}/ip/&&tag==2{print "ip=0.0.0.0";next}1'

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
3 [报告]
发表于 2013-01-21 08:49 |只看该作者
  1. sed '/\[tag2\]/,/^$/{/^ip=/s/.*/ip=0.0.0.0/}'
复制代码

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
4 [报告]
发表于 2013-01-21 11:12 |只看该作者
  1. sed '/[tag2]/{N;N;s/ip=.*/ip=0.0.0.0/}'
复制代码

论坛徽章:
1
射手座
日期:2014-03-10 14:24:52
5 [报告]
发表于 2013-01-21 13:23 |只看该作者
学习了!!

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
6 [报告]
发表于 2013-01-22 14:09 |只看该作者
本帖最后由 seesea2517 于 2013-01-22 14:10 编辑

要改原文件的话,加 i 选项就行了。
  1. [seesea@UC ~]$ cat file.txt
  2. [tag1]
  3. version=1910
  4. ip=1.1.1.1
  5. port=9890

  6. [tag2]
  7. version=2111
  8. ip=2.4.4.4
  9. port=9087

  10. [seesea@UC ~]$ sed -r '/tag2/{:a; n; /ip/{s/.*/ip=0.0.0.0/; b}; ba}' file.txt  
  11. [tag1]
  12. version=1910
  13. ip=1.1.1.1
  14. port=9890

  15. [tag2]
  16. version=2111
  17. ip=0.0.0.0
  18. port=9087
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
7 [报告]
发表于 2013-01-22 14:11 |只看该作者
  1. # 二楼的结果正确,不过 awk 不能改原文件
  2. [seesea@UC ~]$ awk '/\[tag2\]/{tag=2}/ip/&&tag==2{print "ip=0.0.0.0";next}1' file.txt
  3. [tag1]
  4. version=1910
  5. ip=1.1.1.1
  6. port=9890

  7. [tag2]
  8. version=2111
  9. ip=0.0.0.0
  10. port=9087

  11. # 三楼的正确
  12. [seesea@UC ~]$ sed '/\[tag2\]/,/^$/{/^ip=/s/.*/ip=0.0.0.0/}' file.txt
  13. [tag1]
  14. version=1910
  15. ip=1.1.1.1
  16. port=9890

  17. [tag2]
  18. version=2111
  19. ip=0.0.0.0
  20. port=9087

  21. # 四楼的,少了后面的内容了
  22. [seesea@UC ~]$ sed '/[tag2]/{N;N;s/ip=.*/ip=0.0.0.0/}' file.txt
  23. [tag1]
  24. version=1910
  25. ip=0.0.0.0
  26. port=9890

  27. [tag2]
  28. version=2111
  29. ip=0.0.0.0
复制代码

论坛徽章:
0
8 [报告]
发表于 2013-01-22 14:31 |只看该作者
回复 4# 代号:军刀


你这个会把tag2后面的ip的值都改掉

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
9 [报告]
发表于 2013-01-22 15:26 |只看该作者
回复 8# dWX56896


    谢谢提醒。我之前写的那个是错误的,对n和N混淆了,下面这个应该没有问题
  1. sed '/tag2/{n;n;/ip/s/.*/ip=0.0.0.0/}'
复制代码

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
10 [报告]
发表于 2013-01-22 15:38 |只看该作者
回复 8# dWX56896


    用N是作用于多行的模式的,想想也没错,上面我第一次的那个例子的真正错误在于[tag2]的中括号
  1. sed '/\[tag2\]/{N;N;s/ip=.*/ip=0.0.0.0/}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP