次の文字と数字を含む文字列があります。
one0.1231two,
変えたい一つそして二つ新しい文字順で
three0.1231four,
その間の数字は変更されずに保持されます。しかし、2つの部分文字列一つそして二つ常に同じままですが、それらの間の数値シーケンスの長さは変わります。
one0.000230002two, one1293.02two, or one42two
起こることがあります。これまでは、sedと正規表現を使用して固定ビット数でのみ置き換えることができました。
次の状況のみが発生します一つそして二つ上記のように周囲の数字を交換する必要があります。他のすべてのイベントは変更されていないままにしてください。
答え1
次のことができます。
sed 's/one\([[:digit:].]*\)two/three\1four/g'
これ\(...\)
捕獲\1
(ここでは0個以上の10進数またはピリオドシーケンス)内で一致するため、代替項目で参照できます。
答え2
次のsed
代替品を使用することをお勧めします。
$ s="one0.000230002two, one1293.02two, or one42two "
$ sed -E 's/([^ 0-9]+)([0-9]+(\.[0-9]+)?)([^ 0-9,]+)/three\2four/g' <<<"$s"
three0.000230002four, three1293.02four, or three42four