1

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

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

例如:

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

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

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

3 回答 3

3

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

$ cut -d, -f1-3,6- file
于 2011-04-17T07:43:29.740 回答
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
于 2011-04-17T07:32:02.413 回答
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:])

但请注意csv 模块的前言

所谓的 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
,,
,,
于 2011-04-17T07:51:20.817 回答