忽略grep regex中的前五列

忽略grep regex中的前五列,regex,grep,Regex,Grep,我有一个csv文件,我想寻找包含“ABC”、“12”和“45”的行。但我不想在“ABC”的前五栏中打勾。所以我写了这个正则表达式: (.*?,)(.*?,)(.*?,)(.*?,)(.*?,).*,ABC,.*,12,.*,45,.* 但当我这么做的时候 grep '(.*?,)(.*?,)(.*?,)(.*?,)(.*?,).*,ABC,.*,12,.*,45,.*' in.csv| wc -l 我得到零行 但如果我不忽略前五列,那么 grep '.*,ABC,.*,12,.*,45,.

我有一个csv文件,我想寻找包含“ABC”、“12”和“45”的行。但我不想在“ABC”的前五栏中打勾。所以我写了这个正则表达式:

(.*?,)(.*?,)(.*?,)(.*?,)(.*?,).*,ABC,.*,12,.*,45,.*
但当我这么做的时候

grep '(.*?,)(.*?,)(.*?,)(.*?,)(.*?,).*,ABC,.*,12,.*,45,.*' in.csv| wc -l 
我得到零行

但如果我不忽略前五列,那么

grep '.*,ABC,.*,12,.*,45,.*' in.csv| wc -l 
然后我得到4962行

但实际上,csv中满足这一点的行更少。那么我在第一个正则表达式中缺少了什么

输入:

306702,00848719009996,NULL,B,ABC,199.00,189.05,311,XYZ,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,9SIA3G62HJ3818,12,45 
不应该匹配

306702,00848719009996,NULL,B,ABC,199.00,189.05,311,ABC,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,9SIA3G62HJ3818,12,45

应该使用tail和pipe匹配grep可以做的输出,
tail-n+5英寸.csv | grep'ABC'| grep'12'| grep'45'
此处+5表示5之后的所有行

如果匹配顺序很重要,您可以尝试:
tail-n+5英寸.csv | grep-E'ABC.*12.*45'

如果你想匹配任何一个匹配项,grep或can do the magic
grep'ABC\| 12\| 45'

grep跳过第一列和第二列

grep "xxx" file.log | awk '{$1="";$2="";print}'

请尝试
grep-P'^(.*,)(.*,)(.*,)(.*,)(.*,)(.*,)。(@AvinashRaj仍然是零行,显示一个示例输入。请尝试
grep-P'^(.*,)(.-,)(.-,)(.-,)(.-,)(.-,)(.-,)(.-)(.-,)(.-)*(?@AvinashRaj当我尝试sublime等时,这很好。这里需要为grep转义一些特殊的字符吗?
grep
命令将搜索文件,包括应该排除的列。
awk
命令不会对逗号分隔的记录进行操作,而是对空格分隔的记录进行操作,因此这不起作用类似于OP要求的任何内容。OP尝试放弃某些列,但
tail
命令将放弃某些行。