在Makefile中的sed中替换变量

时间:2016-12-22 11:32:50

标签: bash sed makefile

我已经完成了所有可能的答案,但我仍然无法使我的剧本发挥作用。

我在SPARQL中有一个查询脚本,其中一行需要用“<>”之间的变量替换标记%contributor%

?link dcterms:contributor %contributor%

 ?link dcterms:contributor <http://newurl>

如果我在shell中执行代码,则替换正确完成,并且我看到我的查询已成功替换%contributor%标记。但是当在Makefile中执行时,即使使用双 $$ 美元来允许扩展变量,我也无法完成它。

for l in `cat sref.csv`; do \
    QUERY=$$(cat queries/table_knowledge.rq | sed "s@%contributor%@<$$l>@g") ; \
    echo $$QUERY ; \
done

也是这样,它不起作用:

QUERY=$$(cat queries/table_knowledge.rq | sed 's/%contributor%/<$(l)>/g') ; \

QUERY=$$(cat queries/table_knowledge.rq | sed 's/%contributor%/<${l}>/g') ; \

1 个答案:

答案 0 :(得分:2)

使用双引号使sed扩展变量。
使用不同于/的分隔符,因为替换包含/

QUERY=$(cat queries/table_knowledge.rq | sed "s|%contributor%|<${l}>|g") ;

<强> 测试:

$ test="http://test.com"
$ echo "?link dcterms:contributor %contributor%" > source.file
$ x=$(cat source.file|sed "s|%contributor%|<${test}>|g")
$ echo $x
?link dcterms:contributor <http://test.com>