如何删除或解决sed中特定字符的出现?
我正在编辑CSV文件,我想删除逗号第三次和第五次出现之间的所有文本(即删除第四和第五个字段)。有没有办法用sed来实现这个目标?
E.g:
% cat myfile
one,two,three,dropthis,dropthat,six,...
% sed -i 's/someregex//' myfile
% cat myfile
one,two,three,,six,...
答案 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
,,
,,