File 更改文件的目标行
我正在运行一个进程,它使用parameters.py文件中定义的一组参数 现在,我想把其中一个参数的值扫过一定范围。因此,我编写了一个批处理文件来自动化这个过程 问题 我的问题是我需要修改文件参数的第20行,从File 更改文件的目标行,file,bash,text,batch-file,command-line-interface,sed,File,Bash,Text,Batch File,Command Line Interface,Sed,我正在运行一个进程,它使用parameters.py文件中定义的一组参数 现在,我想把其中一个参数的值扫过一定范围。因此,我编写了一个批处理文件来自动化这个过程 问题 我的问题是我需要修改文件参数的第20行,从value=200到value=$VAR,其中$VAR设置参数的新值 问题 是否有允许更改文件特定目标行的bash命令 谢谢大家,干杯。尝试使用以下方法: 这将在第20行将value=200更改为value=$VARs//是sed替换的框架:s/before/after/ 使用-i开关在位
value=200
到value=$VAR
,其中$VAR
设置参数的新值
问题
是否有允许更改文件特定目标行的bash命令
谢谢大家,干杯。尝试使用以下方法:
这将在第20行将value=200
更改为value=$VAR
s//
是sed
替换的框架:s/before/after/
使用-i
开关在位编辑文件尝试以下操作:
这将在第20行将value=200
更改为value=$VAR
s//
是sed
替换的框架:s/before/after/
-i
开关就地编辑文件虽然这当然是可能的,但我不推荐这样做。有一天,有人会在这一行或空行前添加评论,你的脚本就会中断
改用sed
:
sed -e 's/value = 200/value = $VAR/' < parameters.py
parameters.py:
import parameterdefaults
options = dict( **parameterdefaults.options ) # copy defaults
options['value'] = 10 # Override the few values you need to change
import parameterdefaults
import parameters
options = dict( **parameterdefaults.options ) # copy defaults
options.update( parameters.options ) # merge with changes
options = {
"value": 10,
}
或者更好:
需要sparameters.py的代码:
import parameterdefaults
options = dict( **parameterdefaults.options ) # copy defaults
options['value'] = 10 # Override the few values you need to change
import parameterdefaults
import parameters
options = dict( **parameterdefaults.options ) # copy defaults
options.update( parameters.options ) # merge with changes
options = {
"value": 10,
}
现在你可以写:
parameters.py:
import parameterdefaults
options = dict( **parameterdefaults.options ) # copy defaults
options['value'] = 10 # Override the few values you need to change
import parameterdefaults
import parameters
options = dict( **parameterdefaults.options ) # copy defaults
options.update( parameters.options ) # merge with changes
options = {
"value": 10,
}
虽然这当然是可能的,但我不推荐。有一天,有人会在这一行或空行前添加评论,你的脚本就会中断 改用
sed
:
sed -e 's/value = 200/value = $VAR/' < parameters.py
parameters.py:
import parameterdefaults
options = dict( **parameterdefaults.options ) # copy defaults
options['value'] = 10 # Override the few values you need to change
import parameterdefaults
import parameters
options = dict( **parameterdefaults.options ) # copy defaults
options.update( parameters.options ) # merge with changes
options = {
"value": 10,
}
或者更好:
需要sparameters.py的代码:
import parameterdefaults
options = dict( **parameterdefaults.options ) # copy defaults
options['value'] = 10 # Override the few values you need to change
import parameterdefaults
import parameters
options = dict( **parameterdefaults.options ) # copy defaults
options.update( parameters.options ) # merge with changes
options = {
"value": 10,
}
现在你可以写:
parameters.py:
import parameterdefaults
options = dict( **parameterdefaults.options ) # copy defaults
options['value'] = 10 # Override the few values you need to change
import parameterdefaults
import parameters
options = dict( **parameterdefaults.options ) # copy defaults
options.update( parameters.options ) # merge with changes
options = {
"value": 10,
}
要做到这一点而不是破解脚本,最简单的方法(但不是最好的)是将其从
value = 200
到
通过这种方式,可以从调用过程中修改脚本,不管是什么。最简单(但不是最好)的方法是从
value = 200
到
这样就可以从调用过程中修改它,不管它是什么。我不明白你所说的扫描是什么意思。听起来像你在寻找,它允许你在流(或文件)中寻址一行并编辑它,但我不清楚您为什么在Bash中这样做,而不是为Python脚本提供参数。正如@Johnsyweb所暗示的,也许您应该说明您试图实现的目标,因为使用
sed
或类似的方法修改Python脚本似乎是错误的,您只需传入或更改CLI参数,以便它从环境中获取值。什么进程正在使用这个parameters.py
另一个Python脚本或shell。?我不明白你所说的扫描是什么意思。听起来像你在寻找,它允许你在流(或文件)中寻址一行并编辑它,但我不清楚您为什么在Bash中这样做,而不是为Python脚本提供参数。正如@Johnsyweb所暗示的,也许您应该说明您试图实现的目标,因为使用sed
或类似的方法修改Python脚本似乎是错误的,您只需传入或更改CLI参数,以便它从环境中获取值。什么进程正在使用这个parameters.py
另一个Python脚本或shell。?应该是20s/
。。。而不是4s/…
。(数字是应用搜索命令的行)@sputnick Thx用于快速响应。请您解释一下4
值在搜索中起什么作用?因为我的文件有多行模式value=200
。。。我只需要换第20行。谢谢@Aarondigula!关于-i
标志非标准的非常有用的强制性评论:它在一些sed
实现中不存在。在BSD上它的扩展参数是必需的,而在GNU上它的扩展参数不是。。。而不是4s/…
。(数字是应用搜索命令的行)@sputnick Thx用于快速响应。请您解释一下4
值在搜索中起什么作用?因为我的文件有多行模式value=200
。。。我只需要换第20行。谢谢@Aarondigula!关于-i
标志非标准的非常有用的强制性评论:它在一些sed
实现中不存在。在BSD上它的扩展参数是必需的,而在GNU上它的扩展参数不是。注意,此解决方案将替换所有出现的value=200
,而不仅仅是第20行注意,此解决方案将替换所有出现的value=200
,而不仅仅是第20行