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

看板Linux作者 (a02)時間6年前 (2017/08/21 17:02), 編輯推噓11(1108)
留言19則, 7人參與, 最新討論串1/1
請問一個問題,我有一個文字檔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

08/21 18:41, , 1F
做兩次 先拿掉""裡面的, 再拿掉"
08/21 18:41, 1F

08/21 20:56, , 2F
sed 's/"\([0-9]*\),\([0-9]*\)"/\1\2/g' 0.txt
08/21 20:56, 2F

08/22 09:24, , 3F
"" 裡只會有一個 , 還是有可能有多個?
08/22 09:24, 3F

08/22 11:50, , 4F
用 csv parser 吧,或 awk 好像有個選項可以讀 csv
08/22 11:50, 4F

08/22 11:51, , 5F
js: fileString.replace(/".*?"/g, (s) =>
08/22 11:51, 5F

08/22 11:52, , 6F
s.slice(1,-1).replace(/,/g, ''))
08/22 11:52, 6F

08/22 14:00, , 7F
perl -pe 's{".*?"}{ substr $& =~ s/,//g, 1, -1 }ge'
08/22 14:00, 7F

08/22 14:00, , 8F
或 perl -pe 's{".*?"}{ $& =~ s/[",]//g }ge'
08/22 14:00, 8F

08/22 14:10, , 9F
呃,上面二行第二個 regexp 要加 flag r
08/22 14:10, 9F

08/22 21:57, , 10F
perl的話用Regexp::Common模組有現成的測試成對引號的函式
08/22 21:57, 10F

08/22 21:58, , 11F
尤其是引號內允許 \"之類的東西出現時 不用自己寫額外測試
08/22 21:58, 11F

08/22 22:06, , 12F
Tormentor的方法好,奈何"裏面多於一個,就不行
08/22 22:06, 12F

08/23 22:31, , 13F
s/"\([0-9]*\),\([0-9]*\),\([0-9]*\)"/\1\2\3/g
08/23 22:31, 13F

08/24 00:53, , 14F
樓上,你這樣只有一個,的不會替換到吧
08/24 00:53, 14F

08/24 11:02, , 15F

08/24 11:57, , 16F
那三個,四個,....
08/24 11:57, 16F

08/24 12:09, , 17F
有人用 awk 刻了 csv parse https://goo.gl/aPo9ey
08/24 12:09, 17F

08/24 12:10, , 18F
改一下就可以用了 (把第一個 gsub 的 \\, 刪掉)
08/24 12:10, 18F

08/25 05:56, , 19F
https://pastebin.com/J0q5t4wZ 多個逗點之sed版本
08/25 05:56, 19F
文章代碼(AID): #1Pcg6hMq (Linux)