看板 Linux 關於我們 聯絡資訊
請問一個問題,我有一個文字檔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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.20.180.161 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1503306155.A.5B4.html
Vett: 做兩次 先拿掉""裡面的, 再拿掉" 08/21 18:41
Tormentor: sed 's/"\([0-9]*\),\([0-9]*\)"/\1\2/g' 0.txt 08/21 20:56
rickieyang: "" 裡只會有一個 , 還是有可能有多個? 08/22 09:24
hijkxyzuw: 用 csv parser 吧,或 awk 好像有個選項可以讀 csv 08/22 11:50
hijkxyzuw: js: fileString.replace(/".*?"/g, (s) => 08/22 11:51
hijkxyzuw: s.slice(1,-1).replace(/,/g, '')) 08/22 11:52
hijkxyzuw: perl -pe 's{".*?"}{ substr $& =~ s/,//g, 1, -1 }ge' 08/22 14:00
hijkxyzuw: 或 perl -pe 's{".*?"}{ $& =~ s/[",]//g }ge' 08/22 14:00
hijkxyzuw: 呃,上面二行第二個 regexp 要加 flag r 08/22 14:10
flu: perl的話用Regexp::Common模組有現成的測試成對引號的函式 08/22 21:57
flu: 尤其是引號內允許 \"之類的東西出現時 不用自己寫額外測試 08/22 21:58
jimfan: Tormentor的方法好,奈何"裏面多於一個,就不行 08/22 22:06
OSDBNetwork: s/"\([0-9]*\),\([0-9]*\),\([0-9]*\)"/\1\2\3/g 08/23 22:31
rickieyang: 樓上,你這樣只有一個,的不會替換到吧 08/24 00:53
OSDBNetwork: https://pastebin.com/gdiE4Wxc 08/24 11:02
rickieyang: 那三個,四個,.... 08/24 11:57
rickieyang: 有人用 awk 刻了 csv parse https://goo.gl/aPo9ey 08/24 12:09
rickieyang: 改一下就可以用了 (把第一個 gsub 的 \\, 刪掉) 08/24 12:10
OSDBNetwork: https://pastebin.com/J0q5t4wZ 多個逗點之sed版本 08/25 05:56