首页 > 解决方案 > 如何使用 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

标签: bashshell

解决方案


它不应该比

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( ) 的^任何字符 ( )。.*$


推荐阅读