我想replace为以下模式(上述规则具有更高的优先级)
\right) -> remain unchanged \right ) -> remain unchanged \right] -> remain unchanged \right ] -> remain unchanged \right} -> remain unchanged \right } -> remain unchanged \ri) -> \right) \ri -> \rightarrow \right -> \rightarrow
换句话说,如果有任何括号括号或大括号,我想有\ right,如果有的话,它应该被\ rightarrowreplace。 简而言之,我试图将大量短文档的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 \ right \ right \ 我的testinginputtempfile1是以下
\ri\right\right \right)\right]\right }\right )\ri \right ]\righta \al \\
它进入
\rightarrow\right\rightarrow \right)\right]\right }\right )\rightarrow \right ]\rightarrow \alpha \\
注意到\ right \ part没有正确完成。 然后,我添加了下面一行,认为它将显式地提取剩下的内容,但是,它不能按预期工作,现在我真的很困惑…
sed -i 's/\\right\\/\\rightarrow\\/g' $tempfile1 #why this does not work
提前感谢!
当表达式出现问题时:
sed -i 's/\\right\([^])}>|a]\)/\\rightarrow\1/g'
适用于:
\right\right\
第一场比赛看到\right\
并用\rightarrow\
替换它; 扫描恢复时会出现问题,它从第二个right
的r
开始,而不是反斜杠(这是前一次匹配的一部分)。
简单的诀窍是重复命令…
sed -i -e 's/\\right\([^])}>|a]\)/\\rightarrow\1/g' \ -e 's/\\right\([^])}>|a]\)/\\rightarrow\1/g'
重新扫描通过再次启动从头开始处理第二\right\
序列。