我已经完成了所有可能的答案,但我仍然无法使我的剧本发挥作用。
我在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') ; \
答案 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>