3

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

现在我的论点是这样设置的:

出口研究=$ 1

出口标签=$2

出口模式=$3

出口选择=$4

我的 sed 命令如下所示:

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

是否有一些简单的方法可以让 sed 不看字面的 $study,或者此时以另一种方式做会更好?

4

3 回答 3

15

使用双引号而不是单引号。

因为'引用可以防止 shell 变量扩展,而"引用不能。

于 2009-05-12T18:37:10.457 回答
1

你可能不会遇到这个问题,但以防万一......

如果$study可能包含对sed.

mv freq.spx freq.spx.backup && \
    awk -v "study=$study" '{
        gsub(/thisisthestudycodereplacethiswiththestudycode/, study);
        print;
    }' freq.spx.backup > freq.spx

$study虽然很尴尬(哈哈,双关语!),但无论' 的内容如何,​​这总是有效的。

于 2009-05-12T21:00:34.887 回答
0

试试这个............ sed -e 's/%d/'$a'/g' amar.htm , amar.htm 有字符串 "%d " 这确实是要替换的,而 "a" 是要替换的字符串。

于 2013-06-11T05:34:57.473 回答