【问题标题】: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