各行で最後の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で上記の内容をテストしました。\2
sed
PS。あなたの質問の二重sedもMacOSで動作します。おそらくあなたの問題は、この行が次のようになることです。キャリッジリターンで終了改行の代わりに?