二重引用符の間の文字のみをsedまたはawkに置き換えます。

二重引用符の間の文字のみをsedまたはawkに置き換えます。

このシナリオはCSVファイルにあります。

ID,PRICE,QUANTITY,ARRIVAL
01299,"41,5",1,0
26528,"412,03",0,0
38080,"2,35",0,0
38081,"2,35",0,0
..
..

私が自分で尋ねる質問は次のとおりです。をどのように変更できますか?ただし,.価格のみ二重引用符で囲まれた列に対してのみ"..."可能PRICEですか?

私は前に試しました

sed -i 's/\(,\)[^ ]*\( .*\)/\1"."\2/'

しかし、成功しなかった場合はヒントを与えることができますか?

ベストアンサー1

正規表現を拡張するには、sedの「-E」オプションを使用することをお勧めします。引用符の間に数字しかない場合は、次のことができます。

~ $ cat foo
lorem, ipsum
"5,25", foobar
"foo,bar", foobar
~ $ cat foo | sed -E 's/"([0-9]+)\,([0-9]+)"/"\1.\2"/g'
lorem, ipsum
"5.25", foobar
"foo,bar", foobar

引用符に大文字と小文字が含まれている場合は、次のように正規表現を拡張できます。

~ $ cat foo | sed -E 's/"([0-9]+|[a-z]+|[A-Z]+)\,([0-9]+|[a-z]+|[A-Z]+)"/"\1.\2"/g'
lorem, ipsum
"5.25", foobar
"foo.bar", foobar

regex101.comで正規表現を簡単にテストできます。参照:https://regex101.com/r/mlfSmp/1

おすすめ記事