2015-10-16 70 views
0

我想用sed扩展/替换一个变量的值。实施例 文件TestVarExpand.txt包含使用sed脚本展开环境变量

Student: $name 
Class..: ${classname} 

在命令行,手动键入:

v1="John McGyver" 
v2="Molecular Biology CS234" 
sed -re "s/[$]name/$v1/" -e "s/[$]\{classname\}/$v2/g" TestVarExpand.txt 

控制台输出(校正):

学生:约翰McGyver
类..:分子生物学CS234

在真实场景中,我有很多变量需要扩展。因此,我认为使用sed脚本在Sed - An Introduction and Tutorial by Bruce Barnett教导的:的 内容TestVarExpand.sed

#!/bin/sed -rf 

s|[$]name|"$v1"|g 
s|[$]\{classname\}|'$v2'|g 

而且通过测试:

chmod 744 ./TestVarExpand.sed 
v1="John McGyver" 
v2="Molecular Biology CS234" 
./TestVarExpand.sed < ./TestVarExpand.txt 

控制台输出(不正确):

学生:“$ v1”
类别:'$ v2'

问题:在TestVarExpand.sed中执行命令行中sed -re“expr”的等价性(双引号以评估变量)是什么语法?谢谢。

回答

0

需要并导出才能在脚本中使用变量,并且您可以在bash中使用sed以在此情况下使用其他shell操作。

TestVarExpand.sh

#!/bin/bash 

sed -e " 
    s/[$]name/${v1}/g 
    s/[$]{classname}/${v2}/g 
    " $1 

与数据

chmod 744 ./TestVarExpand.sh 
export v1="John McGyver" 
export v2="Molecular Biology CS234" 
./TestVarExpand.sh ./TestVarExpand.txt 

结果

Student: John McGyver 
Class..: Molecular Biology CS234 
+0

感谢。今天浪费了一些时间在* .sed脚本中尝试各种语法(我喜欢每行1 expr中的所有sed表达式)。但未能实现env变量的扩展。以命令行方式调用sed使用双引号表达式的方式似乎是通过sed使用变量的唯一方法。 – Polymerase