Shell 如果图案不存在,则插入线条';t不匹配,否则用图案修改线条
假设我想用以下Shell 如果图案不存在,则插入线条';t不匹配,否则用图案修改线条,shell,sed,Shell,Sed,假设我想用以下sed修改文件foo.ini: bar="hello" sed -i " # if there is NZ variable in db2dj.ini, we simpl
sed
修改文件foo.ini
:
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=hi
的NZ
变量,它会将其更改为NZ=hello
NZ=hello
出现在foo.ini
sed
命令以完成此任务?我相信我的sed
命令适用于(1),但不适用于(2)(3)
非常感谢 一个简单的
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
一个简单的
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
如果
foo.ini
为空,则该命令不会将NZ=hi
添加到foo.ini
中,谢谢您的帮助!谢谢你的帮助!如果foo.ini
为空,则该命令不会将NZ=hi
添加到foo.ini
中,谢谢您的帮助!谢谢你的帮助!