最後の2つのカンマをドットに置き換えます。

最後の2つのカンマをドットに置き換えます。

各行で最後の2つのカンマをドットに置き換えたいです。

私はこの2つのsedパイプ方法を見つけましたが、MacOSのsedでは機能しません。

$ echo 'abc,def,12379,foo' | sed 's/\(.*\),/\1./'|sed 's/\(.*\),/\1./'
abc,def.12379.foo

すべてのsedバージョンで動作する方法はありますか?必ずしもsedでのみ使用されるわけではありません。

ベストアンサー1

この試み:

$ echo 'abc,def,12379,foo' | sed 's/,\([^,]*\),\([^,]*\)$/.\1.\2/'
abc,def.12379.foo

これにより、行にカンマが1つだけ残ります(例foo,bar:)。これはあなたが望むものかもしれないし、そうでないかもしれません。

\(...\);のすべてのバージョンは、代替文字列でのグループキャプチャと逆\1参照をサポートする必要があります。私はUnix v7で上記の内容をテストしました。\2sed

PS。あなたの質問の二重sedもMacOSで動作します。おそらくあなたの問題は、この行が次のようになることです。キャリッジリターンで終了改行の代わりに?

おすすめ記事