Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 更改文件的目标行_File_Bash_Text_Batch File_Command Line Interface_Sed - Fatal编程技术网

File 更改文件的目标行

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开关在位

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

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

问题

我的问题是我需要修改文件参数的第20行,从
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行