如何使用sed将TeX中的$$blah$$转换为\begin{equation}blah\end{equation}
我有包含以下表格条目的文件:如何使用sed将TeX中的$$blah$$转换为\begin{equation}blah\end{equation},sed,Sed,我有包含以下表格条目的文件: $$ y = x^2 $$ 我正在寻找一种方法(特别是使用sed)将它们转换为: \begin{equation} y = x^2 \end{equation} 解决方案不应依赖于方程式的形式(也可能跨越多行),也不应依赖于开头$$之前或结尾$$之后的文本。 谢谢您的帮助。我无法帮助您使用sed,但是这个awk应该可以: awk '/\$\$/ && !f {$0="\\begin{equation}";f=1} /\$\$/ &&
$$
y = x^2
$$
我正在寻找一种方法(特别是使用sed)将它们转换为:
\begin{equation}
y = x^2
\end{equation}
解决方案不应依赖于方程式的形式(也可能跨越多行),也不应依赖于开头$$之前或结尾$$之后的文本。
谢谢您的帮助。我无法帮助您使用
sed
,但是这个awk
应该可以:
awk '/\$\$/ && !f {$0="\\begin{equation}";f=1} /\$\$/ && f {$0="\\end{equation}";f=0}1' file
\begin{equation}
y = x^2
\end{equation}
如果不重复,则不需要f=0
sed '
/^\$\$$/ {
x
s/begin/&/
t use_end_tag
s/^.*$/\\begin{equation}/
h
b
: use_end_tag
s/^.*$/\\end{equation}/
h
}
'
说明:
sed
维护两个缓冲区:模式空间(pspace)和保持空间(hspace)。它以循环方式运行,在每个循环中,它读取一行并执行该行的脚本。pspace通常在每个周期结束时自动打印(除非使用-n
选项),然后在下一个周期之前删除。hspace在循环之间保存其内容
该脚本的思想是,每当看到$$时,都会首先检查hspace是否包含单词“begin”。如果是,则替换结束标记;否则,替换开始标记。在任何一种情况下,将替换的标签存储在保留空间中,以便下次检查
sed '
/^\$\$$/ { # if line contains only $$
x # exchange pspace and hspace
s/begin/&/ # see if "begin" was in hspace
t use_end_tag # if it was, goto use_end_tag
s/^.*$/\\begin{equation}/ # replace pspace with \begin{equation}
h # set hspace to contents of pspace
b # start next cycle after auto-printing
: use_end_tag
s/^.*$/\\end{equation}/ # replace pspace with \end{equation}
h # set hspace to contents of pspace
}
'
这可能适用于您(GNU-sed):
用所需字符串填充保持空间。遇到标记时,打印第一行,然后交换字符串,以等待下一个标记。效果很好,但是,尽管我知道每个命令的作用,但我太厚了,无法理解它是如何工作的。你能补充一些解释吗?@user3856370这样的解释够了吗?你也不胖
sed
很奇怪而且很有限!为什么都挤在一条线上?尽管如此,我还是比我的更喜欢这个+1@ooga除了我在命令行上编写和测试解决方案的方式之外,没有其他特殊原因。
sed -r '1{x;s/^/\\begin{equation}\n\\end{equation}/;x};/\$\$/{g;P;s/(.*)\n(.*)/\2\n\1/;h;d}' file