我有一个GNU makefile
,其中一条食谱线上写着:
sed -i 's|<span class="math">$$\(.*\)$$</span>|<span style="font-size:100%">'"$$(curl -d "type=tex&q=\1" http://localhost:16000/)"'</span>|g' $(NAME).a4.xhtml
想法是替换<span class="math">$$\(.*\)$$</span>
<span style="font-size:100%">..SVG..</span>
其中..SVG..
是执行shell命令curl -d "type=tex&q=\1" http://localhost:16000/
返回的字符串,其中\1
应该是先前记住的模式\(.*\)
。
问题:模式检测和shell执行都正常。但是,\1
并未被先前记住的模式所取代。
PS:如果您希望sed
使用-r
选项,则makefile
内的匹配如下:
sed -i -r 's@<span class="math">\$$(.*)\$$</span>@..@..' $(NAME).a4.xhtml
答案 0 :(得分:0)
答案 1 :(得分:0)
虽然我认为有可能使用sed
扩展名为GNU /e
,但我是否可以谦虚地建议您使用其他工具?
perl -i -MLWP::UserAgent -pe '
BEGIN { $u = LWP::UserAgent->new(); }
s|<span class="math">\$\$\(.*?\)\$\$</span>|
sprintf q{<span style="font-size:100%%">%s</span>},
$u->post("http://localhost:16000/",
[type=>"tex", q=>"$1"])->decoded_content()
|ge' $(NAME).a4.xhtml
(希望有一种更简单的方法从Perl发布POST,但只是抓住了我能找到的东西。如果你有的话,也许可以看看WWW :: Mechanize。)