[問題] 請問一個sed處理文字檔的的寫法

作者: a02a02 (a02)   2017-08-21 17:02:33
請問一個問題,我有一個文字檔0.txt如下:
123,"123,123",789,876,
123,456,789,876,
123,456,789,123,"456,456",
111,222,333,444,555
請問我要如何使用sed指令,去掉雙引號以及雙引號裡面的逗點,使檔案變成如下的檔案?
123,123123,789,876,
123,456,789,876,
123,456,789,123,456456,
111,222,333,444,555
謝謝大家。
我的寫法如下,但是不對。
sed "/\"/,/\"/s/\,//" 0.txt
作者: Vett (Vett)   2017-08-21 18:41:00
做兩次 先拿掉""裡面的, 再拿掉"
作者: Tormentor   2017-08-21 20:56:00
sed 's/"\([0-9]*\),\([0-9]*\)"/\1\2/g' 0.txt
作者: rickieyang (Rickie Yang)   2017-08-22 09:24:00
"" 裡只會有一個 , 還是有可能有多個?
作者: hijkxyzuw (i,j,k) ×(x,y,z)   2017-08-22 11:50:00
用 csv parser 吧,或 awk 好像有個選項可以讀 csvjs: fileString.replace(/".*?"/g, (s) =>s.slice(1,-1).replace(/,/g, ''))perl -pe 's{".*?"}{ substr $& =~ s/,//g, 1, -1 }ge'或 perl -pe 's{".*?"}{ $& =~ s/[",]//g }ge'呃,上面二行第二個 regexp 要加 flag r
作者: flu (Crazy Rhythm)   2017-08-22 21:57:00
perl的話用Regexp::Common模組有現成的測試成對引號的函式尤其是引號內允許 \"之類的東西出現時 不用自己寫額外測試
作者: jimfan (jimfan)   2017-08-22 22:06:00
Tormentor的方法好,奈何"裏面多於一個,就不行
作者: OSDBNetwork (路人甲)   2017-08-23 22:31:00
s/"\([0-9]*\),\([0-9]*\),\([0-9]*\)"/\1\2\3/g
作者: rickieyang (Rickie Yang)   2017-08-24 00:53:00
樓上,你這樣只有一個,的不會替換到吧
作者: OSDBNetwork (路人甲)   2017-08-24 11:02:00
作者: rickieyang (Rickie Yang)   2017-08-24 11:57:00
那三個,四個,....有人用 awk 刻了 csv parse https://goo.gl/aPo9ey改一下就可以用了 (把第一個 gsub 的 \\, 刪掉)
作者: OSDBNetwork (路人甲)   2017-08-25 05:56:00
https://pastebin.com/J0q5t4wZ 多個逗點之sed版本

Links booklink

Contact Us: admin [ a t ] ucptt.com