我正在运行一个进程,该进程使用文件中定义的一组参数 parameters.py
现在,我想在一定范围内扫描其中一个参数的值。因此,我编写了一个批处理文件来自动执行该过程。
问题
我的问题是我需要修改文件参数的第20行,从value = 200
到value = $VAR
,其中$VAR
设置参数的新值。
问题
是否有允许更改文件特定目标行的bash命令?
谢谢你和欢呼。
答案 0 :(得分:2)
尝试使用sed执行此操作:
sed -i "20s/value = 200/value = $VAR/" file.txt
这会在第20行将value = 200
更改为value = $VAR
。s///
是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))
这样就可以从调用过程中修改它可能是什么。