gam*_*ebm 7 linux replace sed backslash
我想替换以下模式(上述规则具有更高的优先级)
\right) -> remain unchanged
\right ) -> remain unchanged
\right] -> remain unchanged
\right ] -> remain unchanged
\right} -> remain unchanged
\right } -> remain unchanged
\ri) -> \right)
\ri -> \rightarrow
\right -> \rightarrow
Run Code Online (Sandbox Code Playgroud)
换句话说,如果有任何括号括号或括号,我想要\ 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
Run Code Online (Sandbox Code Playgroud)
它工作正常,但它不会按预期更改\ right\into\rightarrow \.我的测试输入tempfile1如下
\ri\right\right \right)\right]\right }\right )\ri \right ]\righta \al \\
Run Code Online (Sandbox Code Playgroud)
它进入了
\rightarrow\right\rightarrow \right)\right]\right }\right )\rightarrow \right ]\rightarrow \alpha \\
Run Code Online (Sandbox Code Playgroud)
注意到\ right\part没有正确完成.然后我添加了以下行,认为它会明确地提取剩下的内容,但是,它没有按预期工作,现在我真的很困惑......
sed -i 's/\\right\\/\\rightarrow\\/g' $tempfile1 #why this does not work
Run Code Online (Sandbox Code Playgroud)
非常感谢提前!
当表达式出现以下情况时就会出现问题:
sed -i 's/\\right\([^])}>|a]\)/\\rightarrow\1/g'
Run Code Online (Sandbox Code Playgroud)
应用于:
\right\right\
Run Code Online (Sandbox Code Playgroud)
第一个匹配读取\right\并将其替换为\rightarrow\; 当扫描恢复时会出现问题,它从r第二个开始right,而不是反斜杠(这是上一个匹配的一部分)。
简单的技巧是重复命令......
sed -i -e 's/\\right\([^])}>|a]\)/\\rightarrow\1/g' \
-e 's/\\right\([^])}>|a]\)/\\rightarrow\1/g'
Run Code Online (Sandbox Code Playgroud)
重新扫描\right\通过再次从头开始处理第二个序列。