如何获取不包含某些模式的行
How to get lines that don't contain certain patterns
我有一个包含很多行的文件:
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
您确实需要阅读正则表达式教程,但同时试试这个:
grep -E "^(ABRD|AION).{7}00[37]"
-a
选项是处理二进制文件的非标准扩展,文本文件不需要它。
grep -E '^.{11}(003|007)' file.txt | grep -Ev '^(ABRD|AION)'
第一阶段匹配第十二到第十四列中带有 003
或 007
的任何行。
第二阶段过滤掉任何以 ABRD
或 AION
开头的行。
我有一个包含很多行的文件:
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
您确实需要阅读正则表达式教程,但同时试试这个:
grep -E "^(ABRD|AION).{7}00[37]"
-a
选项是处理二进制文件的非标准扩展,文本文件不需要它。
grep -E '^.{11}(003|007)' file.txt | grep -Ev '^(ABRD|AION)'
第一阶段匹配第十二到第十四列中带有 003
或 007
的任何行。
第二阶段过滤掉任何以 ABRD
或 AION
开头的行。