解决sed中特定字符的出现问题

时间:2011-04-17 07:09:35

标签: parsing csv sed awk

如何删除或解决sed中特定字符的出现?

我正在编辑CSV文件,我想删除逗号第三次和第五次出现之间的所有文本(即删除第四和第五个字段)。有没有办法用sed来实现这个目标?

E.g:

% cat myfile
one,two,three,dropthis,dropthat,six,...

% sed -i 's/someregex//' myfile

% cat myfile
one,two,three,,six,...

3 个答案:

答案 0 :(得分:3)

如果可以考虑cut命令,那么:

$ cut -d, -f1-3,6- file

答案 1 :(得分:2)

awk或能够在分隔符上拆分字符串的任何其他工具比sed

更适合工作
$ cat file
1,2,3,4,5,6,7,8,9,10

红宝石(1.9 +)

$ ruby -ne 's=$_.split(","); s[2,3]=nil ;puts s.compact.join(",") ' file
1,2,6,7,8,9,10

使用awk

$ awk 'BEGIN{FS=OFS=","}{$3=$4=$5="";}{gsub(/,,*/,",")}1'  file
1,2,6,7,8,9,10

答案 2 :(得分:2)

真正的解析器

#!/usr/bin/python

import csv
import sys

cr = csv.reader(open('my-data.csv', 'rb'))
cw = csv.writer(open('stripped-data.csv', 'wb'))

for row in cr:
    cw.writerow(row[0:3] + row[5:])

但请注意preface to the csv module

  

所谓的CSV(逗号分隔   值)格式是最常见的   导入和导出格式   电子表格和数据库。有   没有“CSV标准”,所以格式是   由许多人操作定义   读写它的应用程序。   缺乏标准意味着   微妙的差异经常存在于   由...产生和消费的数据   不同的应用。这些   差异会让人讨厌   处理来自多个的CSV文件   源。尽管如此,还是分隔符   和引用字符各不相同,   整体格式足够相似   可以写一个单一的   有效的模块   操纵这些数据,隐藏   阅读和写作的细节   来自程序员的数据。

$ cat my-data.csv
1
1,2
1,2,3
1,2,3,4,
1,2,3,4,5
1,2,3,4,5,6
1,2,3,4,5,6,
1,2,,4,5,6
1,2,"3,3",4,5,6
1,"2,2",3,4,5,6
,,3,4,5
,,,4,5
,,,,5
$ python csvdrop.py
$ cat stripped-data.csv
1
1,2
1,2,3
1,2,3
1,2,3
1,2,3,6
1,2,3,6,
1,2,,6
1,2,"3,3",6
1,"2,2",3,6
,,3
,,
,,