数字の間にある を置き換えるにはsedコマンドを使用します。

数字の間にある を置き換えるにはsedコマンドを使用します。

次のような形式のデータが入った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'

関連情報