我想用sed替换像$some latex$
或
$$
some latex
$$
使用{% math %}some latex {% endmath %}
或
{% math %}
some latex
{% endmath %}
我尝试sed来解决这个问题,但是像
这样的命令sed -e 's/\$\([^\$]\{1,\}\)\$/{% math %}\1{% endmath %}/g' filename
不适用于$some latex$
而且我不知道如何处理多线路。我怎么能这样做?
答案 0 :(得分:1)
您在这里遇到的唯一问题是捕获换行符或空白,这可以通过以下正则表达式解决。
正则表达式: (?:\$*)(\s*)some latex(\s*)(?:\$*)
使用的标志:
g
进行全球搜索。<强>解释强>
(?:\$*)(\s*)
在引导$
或$$
(\s*)(?:\$*)
在追踪$
或$$
替换为: {% math %}\1some latex\2{% endmath %}
的 Regex101 Demo 强>
答案 1 :(得分:1)
尝试使用sed:
sed -e ' /\$\$/{s/\$\$/{% math %}/;:a;N;/\$\$/!ba;s/\$\$/{% endmath %}/};s/^\(\$\)\(.*\)\(\$\)$/{% math %}\2{% endmath %}/' sourcefile
保留多行。
更新:
似乎有一个BSD(OS X?)sed issue with semi colons。
它应该用新行代替它:
sed -e '
/\$\$/ {
s/\$\$/{% math %}/
:a
N
/\$\$/!ba
s/\$\$/{% endmath %}/;}
s/^\(\$\)\(.*\)\(\$\)$/{% math %}\2{% endmath %}/
' sourcefile
我还更新了上一个s
命令,以匹配评论中提到的$ \$ $
这样的行。