0

我有一个 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>

where..SVG..是执行 shell 命令返回的字符串curl -d "type=tex&q=\1" http://localhost:16000/, where\1应该是先前记住的模式\(.*\)

问题:模式检测和 shell 执行都工作正常。但是,\1不会被先前记住的模式所取代。

PS:如果更喜欢sed-r选项一起使用,里面的匹配makefile如下:

sed -i -r 's@<span class="math">\$$(.*)\$$</span>@..@..' $(NAME).a4.xhtml
4

2 回答 2

0

问题是您使用shell substitutionsed显然不会扩展\1到小组赛。一种解决方案是使用 sed 的命令,这里e给出了一个很好的解释。

如果您需要示例,请参考this的答案。

于 2015-02-09T04:39:09.763 回答
0

虽然我认为可以使用sed带有/e扩展名的 GNU 来实现这一点,但我可以谦虚地建议您使用不同的工具吗?

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 发布的方法,但只是抓住了我能找到的东西。如果你有的话,也许可以看看 WWW::Mechanize。)

于 2015-02-11T03:59:21.310 回答