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に置き換える必要があります。要するに、私は多くの短縮されたgoogledoc方程式を適切な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、2番目の時点から開始されます。right

簡単なトリックは、コマンドを繰り返すことです...

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

再スキャンは、abinitioを再度\right\開始することによって2番目のシーケンスを処理します。

于 2013-01-20T16:04:43.193 に答える