web-dev-qa-db-ja.com

sedコマンドを使用して、数字の間に表示されるを置き換えます

データが次の形式のCSVファイルがあります

|001|,|abc,def|,123456,789,|aaa|,|bbb|,444,555,666

数字の間に表示される「、」だけを、SOH、$、*などの他の文字に置き換えたいと思います。

行に表示されている他の「、」は置き換えないでください。つまり、次の出力が必要です。

|001|,|abc,def|,123456*789,|aaa|,|bbb|,444*555*666

誰かが上記の望ましい出力を得るためにsedコマンドパターンで私を助けてくれますか?

3
Saurabh

これを試して

sed 's/\([0-9]\),\(-\?[0-9]\)/\1\*\2/g'

最初のセクションは、数字とそれに続くコンマとそれに続く数字または-に一致します。次のセクションでは、最初の桁、置換文字、最後の桁を逆流させます。

これにより、「#、#」や「#、-#」など、望ましくないパターンを含むすべてのパターンがキャッチされます(例:「abc123、-def」->「abc123 * -def」)。これを修正するには、入力ストリームに関するより多くの知識が必要です。 (詳細についてはコメントを参照してください。)

4
jwernerny

以下はうまくいくようです:

sed 's/\([0-9]\),\([-0-9]\)/\1\*\2/g'
0
Saurabh