如何获取不包含某些模式的行

Posted

技术标签:

【中文标题】如何获取不包含某些模式的行【英文标题】:How to get lines that don't contain certain patterns 【发布时间】:2016-09-28 18:47:56 【问题描述】:

我有一个包含很多行的文件:

ABRD0455252003666
JLKS8568875002886
KLJD2557852003625
.
.
.
AION9656532007525
BJRE8242248007866

我想提取以(ABRD 或 AION)开头的行,并在第 12 到 14 列中提取数字(003 或 007)。

输出应该是

KLJD2557852003625
BJRE8242248007866

我已经尝试过了,它可以工作,但是它的命令太长了,我想针对性能问题对其进行优化:

 egrep  -a --text '^.12(?:003|007)' file.txt > result.txt |touch results.txt && chmod 777 results.txt |egrep -v -a --text  "ABRD|AION" result.txt > result2.text

【问题讨论】:

^(ABRD|AION)[\n\d]700[37] 请我在帖子中犯了一个错误。我现在更正了它并添加了更多细节 【参考方案1】:

-a 选项是处理二进制文件的非标准扩展,文本文件不需要它。

 grep -E '^.11(003|007)' file.txt | grep -Ev '^(ABRD|AION)'

第一阶段匹配第 12 到第 14 列中的任何带有 003007 的行。

第二阶段过滤掉所有以ABRDAION 开头的行。

【讨论】:

grep -Ea '^(ABRD|AION).7(003|007)' 这不会删除包含(ABRD 或 AION)的行。 请我在帖子中犯了一个错误。我现在更正了它并添加了更多细节【参考方案2】:

你真的只需要阅读正则表达式教程,但同时试试这个:

grep -E "^(ABRD|AION).700[37]"

【讨论】:

请我在帖子中犯了一个错误。我现在更正了它并添加了更多细节

以上是关于如何获取不包含某些模式的行的主要内容,如果未能解决你的问题,请参考以下文章

如何从文本文件中删除重复并包含某些单词的行?

如何在 QTableWidget 中仅获取包含值的行/列数?

Python - 如何获取文本文件中的行数[重复]

如何使用活动记录查询sql以获取指定时间之间的日期

硒如何获取文本大小

如何获取不包括某些子目录的所有子目录?