如果有一文本:[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脚本来帮助大家解决一下头痛的问题,希望能得到大家的支持!
wang4289273 于 2011-08-28 22:59:53发表:
楼上好强啊
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 吧?
cob 于 2011-08-28 16:29:23发表:
不懂帮顶下
biergaizi 于 2011-08-28 13:30:29发表:
初步的思路使用sed和grep,但是有一些地方好像还是不能实现