相关文章推荐
逃课的滑板  ·  数据万象 Glide 加载 ...·  1 年前    · 

换句话说,如果有任何括号或大括号,我希望有 \right,如果有其他东西,它应该被 \rightarrow 替换。简而言之,我试图将大量速记的google doc方程转换成适当的LaTeX格式。我得出的结果是这样的

sed -i 's/\\ri\([^g]\)/\\right\1/g' $tempfile1  #first step substitution
sed -i 's/\\right\([^])}>|a]\)/\\rightarrow\1/g' $tempfile1 
sed -i 's/\\right \([^])}>|a]\)/\\rightarrow \1/g' $tempfile1 

除了没有像预期的那样把\right\改成\rightarrow\之外,它还能正常工作。我的测试输入tempfile1是这样的

\ri\right\right \right)\right]\right }\right )\ri \right ]\righta \al \\

It goes into

\rightarrow\right\rightarrow \right)\right]\right }\right )\rightarrow \right ]\rightarrow \alpha \\

注意到\right\部分没有正确完成。然后我添加了以下一行,认为它将明确地捡起剩下的东西,然而,它并没有像预期的那样工作,现在我真的很困惑......

sed -i 's/\\right\\/\\rightarrow\\/g' $tempfile1 #why this does not work

非常感谢你的到来!

2 个评论
当然,你可以用sed -i -e '...pattern1...' -e '...pattern2...' -e '...pattern3...' ...把你的三个脚本合并成一个。 对于千字节大小的文件来说,三道程序可能并不重要,但对于多兆字节或更大的文件来说,一道程序与三道程序可能会有很大区别。
我明白了,谢谢。对我来说,典型的文件大小不到50K(正常的LaTeX文件),但我有30多个模式(例如:\al\beta\delb\i\sig)需要替换,而且这个数字会随着时间的推移而增加。(感谢google doc的方程式编辑器和他们最近所做的 "改进")。
linux
replace
sed
backslash
gamebm
gamebm
发布于 2013-01-20
1 个回答
Jonathan Leffler
Jonathan Leffler
发布于 2013-01-21
已采纳
0 人赞同

The trouble occurs when the expression:

sed -i 's/\\right\([^])}>|a]\)/\\rightarrow\1/g'
\right\right\

第一个匹配读取了\right\并将其替换为\rightarrow\。问题发生在恢复扫描时,它从第二个rightr开始,而不是从反斜杠开始(那是前一个匹配的一部分)。

简单的技巧是重复命令...