bash - 如何使用 sed 将一个变量替换为另一个变量
问题描述
我想用 3 个变量替换文本文件中的一行。搜索关键字也是一个变量。
另外,我需要每个变量之间有 2 个空格。
我尝试了以下代码:
sed -i -e 's/'"$keyword"'/'"$var1"' '"$var2"' '"$var3"'/' file.txt
sed -i -e 's/"$keyword"/"$var1" "$var2" "$var3"/' file.txt
sed -i -e "s/$keyword/$var1 $var2 $var3/" file.txt
假设文件是:
Banana Apple Pear
America Spain Italy
因此,通过搜索America
,我想要以下结果:
Banana Apple Pear
$var1 $var2 $var3
解决方案
它不应该比
var1=Orange
var2=Grape
var3=Fig
text=America
sed "/${text}/{s/^.*$/${var1} ${var2} ${var3}/}" filename
输出
Banana Apple Pear
Orange Grape Fig
关键是使用双引号,以便扩展 bash 变量。请注意,此变量扩展发生在 sed 处理开始之前。
要替换整行^.*$
,应该使用从 start( ) 开始,选择出现任意次数 ( ) 到 end( ) 的^
任何字符 ( )。.
*
$