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

Mic*_*ael 11 bash shell sed

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

#!/bin/bash
sed -i "s/myprop=[^ ]*/myprop=$newvalue/g" file.properties
Run Code Online (Sandbox Code Playgroud)

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

我认为问题是这$newvalue是一个代表一个目录的字符串,所以它搞砸了sed.

我能做什么 ?

jay*_*ngh 8

如果你的属性文件用这样的=符号分隔-

param1=value1
param2=value2
param3=value3
Run Code Online (Sandbox Code Playgroud)

那么你可以通过只知道param名称来awk修改param值.例如,如果我们想要修改属性文件,我们可以执行以下操作 -param2

awk -F"=" '/param2/{$2="new value";print;next}1' filename > newfile
Run Code Online (Sandbox Code Playgroud)

现在,上面one-liner要求你硬编码 param的新值.如果您在shell脚本中使用它并且需要从变量中获取新值,则可能不是这种情况.

在这种情况下,您可以执行以下操作 -

awk -F"=" -v newval="$var" '/param2/{$2=newval;print;next}1' filename > newfile
Run Code Online (Sandbox Code Playgroud)

在此我们创建一个awk变量newval并使用包含新参数值的脚本变量($ var)对其进行初始化.

  • @Oly您需要设置OFS变量。所以'awk -F'='-v OFS ='='...` (2认同)

Dan*_*ego 7

sed可以使用除/分隔符以外的字符,即使/是最常见的字符.在处理路径名之类的东西时,使用像pipe(|)这样的东西通常很有帮助.