假设我想使用以下foo.ini
修改文件sed
:
bar="hello"
sed -i "
# if there is NZ variable in db2dj.ini, we simply set it to the proper value
s/NZ=*/NZ=$bar/
# if there is no NZ variable, we add NZ_ODBC_INI_PATH variable and set the proper value to it
T add
:add
$ i\NZ_ODBC_INI_PATH=$db2dj_nz_odbc_ini_path
" foo.ini
首先假设foo.ini
为空。然后我运行上面的sed
,我得到了:
NZ=hello
这很好。但是,如果我再次运行相同的sed
命令,foo.ini
将变为:
NZ=hellohello
NZ=hello
我对sed
命令的理想是:
如果没有NZ
变量,则会向其添加NZ=hello
如果已有NZ
变量,其形式为NZ=hi
,则会将其更改为NZ=hello
仅在NZ=hello
foo.ini
时
醇>
如何修改上述sed
命令才能完成此任务?我相信我的sed
命令适用于(1)但不适用于(2)(3)
非常感谢!
答案 0 :(得分:2)
简单的grep
检查就足够了:
grep -q '\bNZ=\b' foo.ini > /dev/null 2>&1 && sed -i 's/NZ=.*$/NZ=hello/' foo.ini || echo "NZ=hello" >> foo.ini
如果没有变量,则会插入上述语句。如果已经存在不同/相同的值,它也会处理替换。
$ cat foo.ini
cat: foo.ini: No such file or directory
$ grep -q '\bNZ=\b' foo.ini > /dev/null 2>&1 && sed -i 's/NZ=.*$/NZ=hello/' foo.ini || echo "NZ=hello" >> foo.ini
$ cat foo.ini
NZ=hello
$ grep -q '\bNZ=\b' foo.ini > /dev/null 2>&1 && sed -i 's/NZ=.*$/NZ=hello/' foo.ini || echo "NZ=hello" >> foo.ini
$ cat foo.ini
NZ=hello
$ vim foo.ini
$ cat foo.ini
NZ=hi
$ grep -q '\bNZ=\b' foo.ini > /dev/null 2>&1 && sed -i 's/NZ=.*$/NZ=hello/' foo.ini || echo "NZ=hello" >> foo.ini
$ cat foo.ini
NZ=hello