Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如果图案不存在,则插入线条';t不匹配,否则用图案修改线条_Shell_Sed - Fatal编程技术网

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
    中,谢谢您的帮助!谢谢你的帮助!