获取sed用参数替换文本

时间:2009-05-12 18:34:41

标签: linux bash scripting sed replace

好吧,我知道这是一个简单的问题,但我似乎无法让这个sed命令工作。我正在尝试获取一个文本文件,并将其中的一部分从占位符文本替换为学习代码。在首次运行脚本时,将使用参数将要替换它的学习代码传递给脚本。问题是,当我尝试用变量$ study替换占位符文本时,它会用字面上的“$ study”替换它。

现在我的论点设置如下:

  

出口研究= $ 1

     

export tag = $ 2

     

导出模式= $ 3

     

export select = $ 4

我的sed命令如下所示:

  

sed -i.backup -e's / thisisthestudycodereplacethiswiththestudycode / $ study /'freq.spx

是否有一些简单的方法可以让sed不去看文字的$ study,或者在这一点上以另一种方式做得更好?

3 个答案:

答案 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”有要替换的字符串。