如何使用sedreplace带有反斜杠的string模式

我想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\替换它; 扫描恢复时会出现问题,它从第二个rightr开始,而不是反斜杠(这是前一次匹配的一部分)。

简单的诀窍是重复命令…

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

重新扫描通过再次启动从头开始处理第二\right\序列。