sedを使用して最初に一致する文字に置き換える

sedを使用して最初に一致する文字に置き換える

ラテックスコードを更新してみてください。 4行:

something $^\text{TT}$ and more stuff
something $^\text{T}$ and more stuff
something $^\text{M\times N}$ and more stuff
something $^\text{T} {otherstuff}$

しなければならない

something $^{\text{TT}}$ and more stuff
something $^{\text{T}}$ and more stuff
something $^{\text{M\times N}}$ and more stuff
something $^{\text{T}} {otherstuff}$

つまり、上付き文字を extra で囲みます{...}

私の試みはsed以下を使用します

sed 's/\^\\text{\(.*\)}/\^{\\{text{\1}}/' testregex

これは最初の3行では機能しますが、最後の行は機能せずに生成されます。

something $^{\text{T} {otherstuff}}$

代わりに。問題はsed各行の最後の行と一致することですが、それ以降の最初の行と}一致する必要があります。}\text{

また、これが同じ行で複数回動作できる場合は良いでしょう。

^\text{1} la la la ^\text{2}

しなければならない

^{\text{1}} la la la ^{\text{2}}

少しだけ修正すれば正常に動作できると確信しています。でも理解できなくて狂ってしまうのです。よろしくお願いします!

ベストアンサー1

貪欲な正規表現の問題を克服する1つの方法は、区切り文字が続く非区切り文字列を明示的に見つけることです。同時に、次の方法で代替構文を簡素化できます。

sed 's/\^\(\\text{[^}]*}\)/\^{\1}/' input.tex 

働かなければならない

sed 's/\^\(\\text{[^}]*}\)/\^{\1}/g' input.tex 

1行に複数の一致があります。

おすすめ記事