红联Linux门户
Linux帮助

求教,如何通过bash脚本 来 修改一些配置文件

发布时间:2011-08-28 13:26:28来源:红联作者:biergaizi
如果有一文本:[code]
default =0

dubug = 1,4,enable
enable = 1,autostart


dubug = 2,8,disable
enable = 1,autostart


dubug = 1,4,disable
enable = 1,autostart


dubug = 1,4,enable
enable = 1,autostart[/code]要求bash脚本做到:

1.根据default来判断需要修改第几个配置
2.能在dubug或者enable后面自动加参数

请问能做到吗?

抱歉浪费大家脑细胞了,本人只是想写一组开源的bash脚本来帮助大家解决一下头痛的问题,希望能得到大家的支持!
文章评论

共有 4 条评论

  1. wang4289273 于 2011-08-28 22:59:53发表:

    楼上好强啊

  2. acrofox 于 2011-08-28 22:20:18发表:

    [i=s] 本帖最后由 acrofox 于 2011-8-28 22:22 编辑 [/i]

    用 sed 的办法:
    第一步:用 sed 获得 default =后面的数字,把它赋给变量 default,我想这一步不难
    第二步:用 sed 或 grep 获得要修改的那个块的起始行号,这个不清楚楼主那个配置文件的一般规律,如果像例子中一样,每一块都是包含 dubug = 和 enable = 两条语句,并且保持这个顺序,那么找 dubug 的等号就可以了,否则改一改:[code]n=$( sed -n '/^dubug *=/=' | sed -n "$default p" )[/code]第三步:修改配置文件。如果跟上面所说的,每一块都是那个样子,很好办;如果每一块可能包含不同数量的语句(比如可以省略 enable = ),那么可能在上一步中还要获取下一块的行号。这里只考虑简单的情况,如果要修改 enable = 后面的内容:[code]sed "$((n+1))s/something/somethine new/" your_config_file > your_new_config_file[/code]这个过程有点复杂。

    用 awk 就更简单些:[code]awk -F "[[:space:]]*=[[:space:]]" '
    BEGIN { blockno=-1 }
    $1=="default" {default=$2}
    $1=="dubug" {blockno=blockno+1}
    {
    if (NR==default && $1=="enable" ) { # 处理这一行,
    } else print
    }[/code]以上代码没有验证,请自行查错。

    PS: 那个 dubug 不是 debug 吧?

  3. cob 于 2011-08-28 16:29:23发表:

    不懂帮顶下

  4. biergaizi 于 2011-08-28 13:30:29发表:

    初步的思路使用sed和grep,但是有一些地方好像还是不能实现