在shell中用“/”替换文件上下文[重复]

e37o9pze  于 2023-01-17  发布在  Shell
关注(0)|答案(2)|浏览(124)
    • 此问题在此处已有答案**:

(17个答案)
昨天关门了。
我的示例文件是这样的:

# sample.txt
adc=lalalala
cmd="echo hihi && echo yoyo"
cda=lolololo

我希望将cmd行替换为:

old=`cat ./sample.txt|grep cmd`
app=' && echo dudu"'

new=${old:0:-1}${app}

sed -i "s/${old}/${new}/g" ./sample.txt

预期结果应该是

adc=lalalala
cmd="echo hihi && echo yoyo && echo dudu"
cda=lolololo

然而结果是:

adc=lalalala
cmd="echo hihi cmd="echo hihi && echo yoyo"cmd="echo hihi && echo yoyo" echo yoyo cmd="echo hihi && echo yoyo"cmd="echo hihi && echo yoyo" echo dudu"
cda=lolololo

我也试过sed -i "s#${old}#${new}#g" ./sample.txt,但没有区别。我能得到一些帮助吗?非常感谢

v1uwarro

v1uwarro1#

试试这样

sed -E -i '' 's@(cmd="echo hihi && echo yoyo)"@\1 \&\& echo dudu"@' sample.txt

注意你必须避开&

5m1hhzi4

5m1hhzi42#

sed -i "/^cmd=*/c$new" ./sample.txt

相关问题