7

我想对以下模式进行替换(上述规则具有更高的优先级)

\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,如果有的话,应该用\rightarrow代替。简而言之,我试图将许多简写的谷歌文档方程转换为适当的 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 \\

它进入

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

注意 \right\ 部分没有正确完成。然后我添加了以下行,认为它会显式拾取剩下的内容,但是,它没有按预期工作,现在我真的很困惑......

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

提前非常感谢!

4

1 回答 1

3

当表达式出现问题时:

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

适用于:

\right\right\

第一个匹配读取\right\并替换为\rightarrow\; 当扫描恢复时会出现问题,它从r第二个开始right,而不是反斜杠(这是上一场比赛的一部分)。

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

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

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

于 2013-01-20T16:04:43.193 回答