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