Text-Processing

僅用 sed 或 awk 替換雙引號之間的字元

  • November 5, 2021

我在 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/'

但是沒有成功,你能給我一個小費嗎?

我建議使用 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

引用自:https://unix.stackexchange.com/questions/676159