Parsing 在sed中寻址字符的特定匹配项

Parsing 在sed中寻址字符的特定匹配项,parsing,csv,sed,awk,Parsing,Csv,Sed,Awk,如何删除或处理sed中特定出现的字符 我正在编辑一个CSV文件,我想删除逗号第三次和第五次出现之间的所有文本,即删除字段4和字段5。使用sed有什么方法可以实现这一点吗 例如: awk或任何其他能够在分隔符上拆分字符串的工具比sed更适合此工作 卢比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=","}{

如何删除或处理sed中特定出现的字符

我正在编辑一个CSV文件,我想删除逗号第三次和第五次出现之间的所有文本,即删除字段4和字段5。使用sed有什么方法可以实现这一点吗

例如:

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

卢比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
awk或任何其他能够在分隔符上拆分字符串的工具比sed更适合此工作

卢比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

如果可以考虑剪切命令,则:

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

如果可以考虑剪切命令,则:

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

一个真正的解析器在运行

#!/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文件 来源。尽管如此,分隔符 引用的字符各不相同 整体格式非常相似,因此 可以写一个单字 模块,该模块可以有效地 操纵此类数据,隐藏 阅读和写作的细节 来自程序员的数据


一个真正的解析器在运行

#!/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,例如逗号分隔符可以用引号保护,那么没有,因为正则表达式不足以解析CSV。sed作为一种图灵完整语言,原则上可以计算任何可计算函数,但使用真正的解析器要容易得多。如果你真的有CSV,例如逗号分隔符可以用引号保护,那么不,没有大量代码就不行,因为正则表达式不足以解析CSV。作为一个图灵完整的语言,SED原则上可以计算任何可计算的函数,但是使用一个真正的PARSRAWK远更适合于字段处理,但是考虑输入字符串1、2、2、3, 4, 5、6。您还犯了与我第一次尝试删除第三个和第五个逗号之间的所有文本时相同的fencepost错误,即删除字段4。我同意您的看法。这类案件需要处理。但和往常一样,我们对这些事情钻研得太深,因为信息不足而产生冲突。如果OP的数据没有这种情况,那么使用简单的拆分就可以了。否则,使用Python/Ruby/Perl支持的真正的解析器应该是更明智的选择。所有这些都由OP自行决定。@msw:删除第三个和第五个逗号之间的所有文本,意味着删除第三个和第四个逗号之间的字段4和5将删除第四列。这就是我的答案。AWK更适合于字段处理,但是考虑输入字符串1、2、2、3, 4, 5、6。您还犯了与我第一次尝试删除第三个和第五个逗号之间的所有文本时相同的fencepost错误,即删除字段4。我同意您的看法。这类案件需要处理。但和往常一样,我们对这些事情钻研得太深,因为信息不足而产生冲突。如果OP的数据没有这种情况,那么使用简单的拆分就可以了。否则,使用Python/Ruby/Perl支持的真正的解析器应该是更明智的选择。所有这些都由OP自行决定。@msw:删除第三个和第五个逗号之间的所有文本,意味着删除第三个和第四个逗号之间的字段4和5将删除第四列。这就是我的答案。使用“实”解析器+1。但是你需要删除字段4和字段5。谢谢,第四次修复了,现在睡觉吧。我保证+1使用“真实”解析器。但是你需要删除字段4和字段5。谢谢,第四次修复,现在睡觉我保证最简单的答案可能是最好的。最简单的答案可能是最好的。