作者a02a02 (a02)
看板Linux
標題[問題] 請問一個sed處理文字檔的的寫法
時間Mon Aug 21 17:02:33 2017
請問一個問題,我有一個文字檔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://webptt.com/m.aspx?n=bbs/Linux/M.1503306155.A.5B4.html
1F:推 Vett: 做兩次 先拿掉""裡面的, 再拿掉" 08/21 18:41
2F:推 Tormentor: sed 's/"\([0-9]*\),\([0-9]*\)"/\1\2/g' 0.txt 08/21 20:56
3F:推 rickieyang: "" 裡只會有一個 , 還是有可能有多個? 08/22 09:24
4F:推 hijkxyzuw: 用 csv parser 吧,或 awk 好像有個選項可以讀 csv 08/22 11:50
5F:→ hijkxyzuw: js: fileString.replace(/".*?"/g, (s) => 08/22 11:51
6F:→ hijkxyzuw: s.slice(1,-1).replace(/,/g, '')) 08/22 11:52
7F:推 hijkxyzuw: perl -pe 's{".*?"}{ substr $& =~ s/,//g, 1, -1 }ge' 08/22 14:00
8F:→ hijkxyzuw: 或 perl -pe 's{".*?"}{ $& =~ s/[",]//g }ge' 08/22 14:00
9F:推 hijkxyzuw: 呃,上面二行第二個 regexp 要加 flag r 08/22 14:10
10F:推 flu: perl的話用Regexp::Common模組有現成的測試成對引號的函式 08/22 21:57
11F:→ flu: 尤其是引號內允許 \"之類的東西出現時 不用自己寫額外測試 08/22 21:58
12F:→ jimfan: Tormentor的方法好,奈何"裏面多於一個,就不行 08/22 22:06
13F:→ OSDBNetwork: s/"\([0-9]*\),\([0-9]*\),\([0-9]*\)"/\1\2\3/g 08/23 22:31
14F:推 rickieyang: 樓上,你這樣只有一個,的不會替換到吧 08/24 00:53
16F:→ rickieyang: 那三個,四個,.... 08/24 11:57
18F:→ rickieyang: 改一下就可以用了 (把第一個 gsub 的 \\, 刪掉) 08/24 12:10