データが次の形式のCSVファイルがあります
|001|,|abc,def|,123456,789,|aaa|,|bbb|,444,555,666
数字の間に表示される「、」だけを、SOH、$、*などの他の文字に置き換えたいと思います。
行に表示されている他の「、」は置き換えないでください。つまり、次の出力が必要です。
|001|,|abc,def|,123456*789,|aaa|,|bbb|,444*555*666
誰かが上記の望ましい出力を得るためにsedコマンドパターンで私を助けてくれますか?
これを試して
sed 's/\([0-9]\),\(-\?[0-9]\)/\1\*\2/g'
最初のセクションは、数字とそれに続くコンマとそれに続く数字または-に一致します。次のセクションでは、最初の桁、置換文字、最後の桁を逆流させます。
これにより、「#、#」や「#、-#」など、望ましくないパターンを含むすべてのパターンがキャッチされます(例:「abc123、-def」->「abc123 * -def」)。これを修正するには、入力ストリームに関するより多くの知識が必要です。 (詳細についてはコメントを参照してください。)
以下はうまくいくようです:
sed 's/\([0-9]\),\([-0-9]\)/\1\*\2/g'