SEDが

2017-02-22 1 views
1

が、私は、このコマンドを使用するグローバルな文字列置換で唯一の最後の発生を置き換えるように見えるが、それは働いていない広告が意図:SEDが

echo "0+223+141+800+450+1*(106+400)+1*(1822+500)+1*(183+400)" | sed 's/\*\(.*\)+/*\1suma/g' 

これは予想される出力です:

0+223+141+800+450+1*(106suma400)+1*(1822suma500)+1*(183suma400) 

が、これはあります私が得るもの:

0+223+141+800+450+1*(106+400)+1*(1822+500)+1*(183suma400) 

の使用にもかかわらず、最後のオカレンスだけが置き換えられているようです。

+0

に拡大されました。タイトルは「awk」と書かれていますが、質問とタグはsedに関するものです。また、「うまくいきません」というのは役に立ちません。何が起こりますか?あなたの成果は? –

+0

0 + 223 + 141 + 800 + 450 + 1 *(106 + 400)+ 1 *(183suma400) – victorhernandezzero

+0

最後の部分のみを変更します – victorhernandezzero

答えて

0

試してみてください。

0+223+141+800+450+1*(106suma400)+1*(1822suma500)+1*(183suma400) 

トリックはsed年代必ず貪欲マッチングを避けるためですので、表現[^+]*がなるように、代わりに.*のに使用されます生み出す

echo "0+223+141+800+450+1*(106+400)+1*(1822+500)+1*(183+400)" | 
    sed 's/\(\*([^+]*\)+/\1suma/g' 

次と一致するだけです。+。貪欲なマッチングに - - あなたの試みは、あなたの意図したパターンの最後発生を置き換えますが、しませんでした


注意は、それが置き換え複数意図したパターンにまたがるだけマッチを見つけました: 最後+リテラルにリテラルの最初の*からすべてを、そしてキャプチャグループ\1 theref -

\*\(.*\)+*(106+400)+1*(1822+500)+1*(183+マッチ鉱石は(106+400)+1*(1822+500)+1*(183

+0

はい – victorhernandezzero