Как использовать sed заменить строку шаблон с обратной косой чертой

Я хочу заменить для следующих шаблонов (вышеприведенное правило имеет более высокий приоритет)

\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. Короче говоря, я пытался преобразовать множество сокращенных уравнений Google в соответствующие форматы 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\in\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

Большое спасибо!

1 ответ

Проблема возникает, когда выражение:

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\, снова запустив ab initio.

licensed under cc by-sa 3.0 with attribution.