免费注册 查看新帖 |

Chinaunix

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

请教一个shell编程的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-15 11:04 |只看该作者 |倒序浏览
现在有一个配置文件,假设为abc.txt,内容如下:
  1. uid = root
  2. [web]
  3. path = /opt/a/
  4. comment = a
  5. ab =cd
  6. [test]
  7. path = /opt/a/
  8. comment = b
  9. param = value
  10. [abc]
  11. path = /opt/a/
  12. comment = c
  13. [def]
  14. path = /opt/a/
  15. comment = d
  16. cba
复制代码
中括号里的是模块名,下面是param = value的形式,参数个数不定。
假设我要修改[test]这部分里的comment的值,应该如何做?最好用sed和awk命令,谢谢。

论坛徽章:
0
2 [报告]
发表于 2011-07-15 14:28 |只看该作者
對於通用的文本工具,包括sed和awk,處理.ini文件都不是很是的工具。

快速開發的話用Java,有現成的API
也可以用C,不過需要自己寫一個實現。

论坛徽章:
0
3 [报告]
发表于 2011-07-15 15:30 |只看该作者
本帖最后由 sakulagi 于 2011-07-15 15:35 编辑

試了試,寫個shell script應該還是能實現的:


  1. #!/bin/bash

  2. section_found=0;

  3. if [ "$#" -lt 4 ]
  4. then
  5.         echo "usage: $0 INPUT_FILE  [SECTION_TO_SEARCH]  KEY_TO_MODIFY  NEW_KEY_VALUE > new_ini_file_name"
  6.         exit
  7. fi

  8. cat $1 | while read line; do
  9.         if [[ $line == "$2" ]]
  10.         then
  11.                 #echo "section found"
  12.                 section_found=1;
  13.         elif [[ $line == \[* ]]
  14.         then
  15.                 section_found=0
  16.         elif [[ $line == $3* ]]
  17.         then
  18.                 #echo "comment found"
  19.                 if [ "$section_found" -eq 1 ]
  20.                 then
  21.                         line="$3 = $4"
  22.                 fi
  23.         fi
  24.         echo $line
  25. done

复制代码
例子 (假設script叫comment.sh, 你的文件是test.ini)

./comment.sh test.ini [test] comment new_b > new_test.ini


寫的有點麻煩,全黨抛磚引玉了

论坛徽章:
0
4 [报告]
发表于 2011-07-15 16:12 |只看该作者
非常感谢。
刚刚别人告诉我一个简单的方法
sed '/\[test\]/,/\[/s/comment.*/comment = act/;' abc.txt

论坛徽章:
0
5 [报告]
发表于 2011-07-18 10:13 |只看该作者
嗯。我還是照著c/java啥的風格來寫的。老土了。謝謝你
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP