【发布时间】:2012-09-30 15:20:19
【问题描述】:
我正在处理一个遵循基本流程的大型 CSV。
- 备份工作原件
- 生成骨架 CSV
- 从另一个 CSV 读取,格式化内容,然后将其附加到骨架
- 将备份中的数据附加到新的。
我遇到的问题是,当我从备份中读取内容时,我将grep -Ev -f 与包含正则表达式的文件一起使用,以从备份中排除不需要的数据以包含在下一个修订版中。这目前存在一个问题,因为 grep 似乎针对来自 STDIN 的每一行评估文件中的每个正则表达式,这将导致重复。简单的解决方案是简单地将其通过sort | uniq 进行管道传输,然后收工,但这将与当前使用的 csv 格式发生冲突。如果需要,我可以详细说明,但不足之处是我运行一个脚本来批量处理 IP 地址,但其他人也手动编辑文件,并且使用当前形式的脚本,最终输出将是所有自动化内容手动条目位于文件的底部。
那么,无论如何,是否有一些丑陋的 grep 循环告诉它在模式匹配后停止评估一行?使用-m 1 将在整个流中的第一个匹配之后停止 grep,我需要它在每个新行之后停止。
【问题讨论】:
-
你能举一个这样的正则表达式和行的例子吗?我无法复制问题。
-
^10\.*^192\.168\.*etc... etc.. 用于 RFC1918 以及一些不必要的随机 IP 地址。问题似乎是,当我想要它找到匹配项然后停止使用文件中的表达式时,它正在针对每个表达式评估每一行。 -
无视一切。该列表只匹配一个表达式。我使用的测试文件无意中更改了,所以我看到了重复的结果。
grep -Ev -f $list_of_expressions会产生我想要的结果。 -
@purblemcgallister 将您的评论作为此问题的答案发布,这样它就不会在 Stack Overflow 中显示为未回答的问题。