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

时间:2016-05-30 22:03:25

标签: linux parsing awk grep filefilter

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

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

2 个答案:

答案 0 :(得分:1)

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

grep -E "^(ABRD|AION).{7}00[37]"

答案 1 :(得分:1)

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

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

第一阶段与第12至第14列中的003007匹配。

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