好吧,我知道这是一个简单的问题,但我似乎无法让这个sed命令工作。我正在尝试获取一个文本文件,并将其中的一部分从占位符文本替换为学习代码。在首次运行脚本时,将使用参数将要替换它的学习代码传递给脚本。问题是,当我尝试用变量$ study替换占位符文本时,它会用字面上的“$ study”替换它。
现在我的论点设置如下:
出口研究= $ 1
export tag = $ 2
导出模式= $ 3
export select = $ 4
我的sed命令如下所示:
sed -i.backup -e's / thisisthestudycodereplacethiswiththestudycode / $ study /'freq.spx
是否有一些简单的方法可以让sed不去看文字的$ study,或者在这一点上以另一种方式做得更好?
答案 0 :(得分:13)
使用双引号而不是单引号。
因为'
引用会阻止shell变量扩展,而"
引用则不会。
答案 1 :(得分:1)
你可能不会遇到这个问题,但以防万一...
如果$study
可能包含对sed
具有特殊含义的斜杠或其他字符,则保罗的答案稍微不够理想。
mv freq.spx freq.spx.backup && \
awk -v "study=$study" '{
gsub(/thisisthestudycodereplacethiswiththestudycode/, study);
print;
}' freq.spx.backup > freq.spx
虽然很尴尬(哈哈,双关语!),但无论$study
的内容如何,这都会有效。
答案 2 :(得分:0)
试试这个................... sed -e's /%d /'$ a'/ g'amar.htm,amar.htm,字符串“%d”确实要被替换,“a”有要替换的字符串。