从shell脚本编辑属性文件中的属性值

时间:2011-12-22 16:42:30

标签: bash shell sed

标题说明了所有。我需要将我不知道的属性值替换为不同的值。 我正在尝试这个:

#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties

我得到sed: -e expression #1, char 19: unknown option to s'`

我认为问题是$newvalue是一个表示目录的字符串,因此它会混淆sed。

我该怎么办?

3 个答案:

答案 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的人的功能。他编写了一个函数脚本来更改属性值,它对我来说很好用:

检查出来: https://gist.github.com/kongchen/6748525