【问题标题】:how can I find and replace the string with quote?如何找到并用引号替换字符串?
【发布时间】:2020-03-07 20:21:18
【问题描述】:

如何找到用引号替换字符串?

输入文件:-

cat test.conf
DIR='/mnt/'

我想替换变量 NEWDIR,变量可以是“/opt”或“/mnt/iso”

注意:- 输入文件中的单引号也应该保留。

NEWDIR="/opt/"
sed -i 's/^DIR=.*$/DIR=$NEWDIR/' test.conf

但它似乎没有替换字符串

cat test.conf
DIR='/mnt/'

【问题讨论】:

    标签: bash shell awk sed scripting


    【解决方案1】:

    试试:

    NEWDIR=/mnt/
    sed -i'' "s:^DIR=.*$:DIR='$NEWDIR':g" test.conf
    

    对 OP 代码的更改:

    • 使用: 作为sed 的分隔符以避免在NEWDIR 中转义斜线
    • 使用sed "..." 代替sed '...' 以允许参数扩展

    用这里的字符串测试它:

    $ NEWDIR=/mnt/
    $ sed "s:^DIR=.*$:DIR='$NEWDIR':g" <<< "DIR='/opt/'"
    DIR='/mnt/'
    

    【讨论】:

      【解决方案2】:

      请您尝试关注一下。

      var="/opt"  ##A shell variable.
      awk -v s1="\"" -v value="$var" '{gsub(/\047\/mnt\/\047/,s1 value s1)} 1' Input_file
      

      如果您想将输出保存到 Input_file 本身,请使用:

      awk -v s1="\"" -v value="$var" '{gsub(/\047\/mnt\/\047/,s1 value s1)} 1' Input_file > temp && mv temp Input_file
      

      【讨论】:

        【解决方案3】:

        使用双引号代替单引号 你的样子会是这样的

        sed -i "s/^DIR=.*$/DIR=$NEWDIR/" test.conf
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-23
          • 1970-01-01
          • 2020-01-24
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多