更改文件的目标行

时间:2013-02-07 15:05:12

标签: file bash text batch-file command-line-interface

我正在运行一个进程,该进程使用文件中定义的一组参数 parameters.py

现在,我想在一定范围内扫描其中一个参数的值。因此,我编写了一个批处理文件来自动执行该过程。

问题

我的问题是我需要修改文件参数的第20行,从value = 200value = $VAR,其中$VAR设置参数的新值。

问题

是否有允许更改文件特定目标行的bash命令?

谢谢你和欢呼。

3 个答案:

答案 0 :(得分:2)

尝试使用执行此操作:

sed -i "20s/value = 200/value = $VAR/" file.txt

这会在第20行将value = 200更改为value = $VARs///sed替换的框架:s/before/after/

-i开关就地编辑文件

答案 1 :(得分:2)

虽然这当然有可能,但我不推荐它。有一天,有人会在此行或空行之前添加注释,您的脚本将会中断。

改为使用sed

sed -e 's/value = 200/value = $VAR/' < parameters.py

更好的解决方案是将parameters.py中的所有内容移动到parameterdefaults.py,如下所示:

parameterdefaults.py:

options = {
    "value": 200,
}

parameters.py:

import parameterdefaults

options = dict( **parameterdefaults.options ) # copy defaults

options['value'] = 10 # Override the few values you need to change

甚至更好:

codethatneedsparameters.py:

import parameterdefaults
import parameters

options = dict( **parameterdefaults.options ) # copy defaults
options.update( parameters.options ) # merge with changes

现在你可以写:

parameters.py:

options = {
    "value": 10,
}

答案 2 :(得分:1)

最简单的方法(但不是最好的)来执行此操作而不是黑客攻击脚本是从

更改它
value = 200

import os # somewhere at the top if need be.
value = int(os.environ.get('VAR', 200))

这样就可以从调用过程中修改它可能是什么。