从shell脚本编辑属性文件中的属性值
标题说明了所有。我需要将我不知道的财产价值换成不同的价值。 我想要这样的:从shell脚本编辑属性文件中的属性值
#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties
我得到sed: -e expression #1, char 19: unknown option to
s'`
我认为这个问题是$newvalue
是代表一个目录,以便它搅乱了sed的字符串。
我该怎么办?
sed
可以使用除/
以外的字符作为分隔符,尽管/
是最常见的。在处理诸如路径名之类的东西时,使用诸如管道(|
)之类的东西通常会很有帮助。
对于某些seds,您需要'逃避'非标准reg-ex分隔符的第一个实例,如's \ | srch | repl |'。祝你们好运。 – shellter 2011-12-22 17:18:21
如果你的属性文件的分隔与=
签这样的 -
param1=value1
param2=value2
param3=value3
那么你可以使用awk
确实因刚知道PARAM名 modifiy的参数值的方式。举例来说,如果我们要修改的param2
在你的属性文件,我们可以做如下 -
awk -F"=" '/param2/{$2="new value";print;next}1' filename > newfile
现在,上面one-liner
需要你硬编码参数的时新的价值。如果您在shell脚本中使用它,并且需要从变量中获取新值,则情况可能不是这种情况。
在这种情况下,你可以做以下 -
awk -F"=" -v newval="$var" '/param2/{$2=newval;print;next}1' filename > newfile
在此,我们创建一个awk
变量newval
,并与您的脚本变量($ VAR),其中包含新的参数值初始化。
如果我想在结尾添加新行(如果该属性不存在)该怎么办? – 2015-08-04 13:33:42
我试过'awk'命令,但它从输出中去掉'=',所以最终将'HOSTNAME = oldvalue'转换为'HOSTNAME newvalue' - 任何想法我错了什么? – 2016-05-20 11:46:59
@Oly您需要设置OFS变量。所以'awk -F'='-v OFS ='='...' – 2016-05-20 13:08:58
'/'只是为了'sed'通常(但不是强制性的)分隔符。如果你尝试别的东西,会发生什么,比如pipe('|')? – 2011-12-22 16:45:44
@DanFego工作!我花了很长时间才意识到我的var字符串中的'/'是问题所在。忘了你可以切换sed分隔符。谢谢 – Michael 2011-12-22 16:50:03
为什么你根本用“g”修饰符? – fge 2011-12-22 16:51:29