标题说明了所有。我需要将我不知道的属性值替换为不同的值。 我正在尝试这个:
#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties
我明白了 sed: -e expression #1, char 19: unknown option to
s'`
我认为问题是这样的 $newvalue
是一个代表一个目录的字符串,所以它搞砸了sed。
我能做什么 ?
标题说明了所有。我需要将我不知道的属性值替换为不同的值。 我正在尝试这个:
#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties
我明白了 sed: -e expression #1, char 19: unknown option to
s'`
我认为问题是这样的 $newvalue
是一个代表一个目录的字符串,所以它搞砸了sed。
我能做什么 ?
sed
可以使用除以外的字符 /
作为分隔符,即使 /
是最常见的。在处理路径名之类的东西时,使用管道之类的东西通常很有帮助(|
)而不是。
如果您的属性文件是以分隔符分隔的 =
像这样的标志 -
param1=value1
param2=value2
param3=value3
那你可以用 awk
做修改 参数价值 只知道了 参数名称。例如,如果我们想修改 param2
在您的属性文件中,我们可以执行以下操作 -
awk -F"=" '/param2/{$2="new value";print;next}1' filename > newfile
现在,以上 one-liner
要求你 硬编码 param的新价值。如果您在shell脚本中使用它并且需要从变量中获取新值,则可能不是这种情况。
在这种情况下,您可以执行以下操作 -
awk -F"=" -v newval="$var" '/param2/{$2=newval;print;next}1' filename > newfile
在此我们创建了一个 awk
变量 newval
并使用包含新参数值的脚本变量($ var)对其进行初始化。
我从名叫Kongchen的人那里找到了一个函数。他编写了一个函数脚本来更改属性值,它对我来说很好: