标题说明了所有。我需要将我不知道的属性值替换为不同的值。 我正在尝试这个:
#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties
我得到sed: -e expression #1, char 19: unknown option to
s'`
我认为问题是$newvalue
是一个表示目录的字符串,因此它会混淆sed。
我该怎么办?
答案 0 :(得分:7)
sed
可以使用/
以外的字符作为分隔符,即使/
是最常见的。在处理路径名之类的东西时,使用管道(|
)之类的东西通常很有帮助。
答案 1 :(得分:7)
如果您的属性文件以=
这样的符号分隔 -
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)对其进行初始化。
答案 2 :(得分:1)
我找到了一个叫Kongchen的人的功能。他编写了一个函数脚本来更改属性值,它对我来说很好用: