我正在运行一个进程,该进程使用文件parameters.py中定义的一组参数
现在,我想扫过其中一个参数在一定范围内的值。因此,我编写了一个批处理文件来实现过程的自动化。
问题
我的问题是,我需要将文件参数的第20行从value = 200
修改为value = $VAR
,其中$VAR
设置参数的新值。
问题
有没有bash命令可以更改文件的特定目标行?
谢谢大家,干杯。
尝试使用sed:执行此操作
sed -i "20s/value = 200/value = $VAR/" file.txt
这将把第20行的value = 200
更改为value = $VAR
。s///
是sed
取代的骨架:s/before/after/
-i
开关就地编辑文件
虽然这当然是可能的,但我不建议这样做。有一天,有人会在这行或空行之前添加注释,你的脚本就会中断。
改为使用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
甚至更好:
需要备件的代码.py:
import parameterdefaults
import parameters
options = dict( **parameterdefaults.options ) # copy defaults
options.update( parameters.options ) # merge with changes
现在你可以写:
parameters.py:
options = {
"value": 10,
}
要做到这一点而不是破解脚本,最简单的方法(但不是最好的)是将其从更改
value = 200
至
import os # somewhere at the top if need be.
value = int(os.environ.get('VAR', 200))
这样,它就可以从调用过程中进行修改。