忽略grep regex中的前五列
我有一个csv文件,我想寻找包含“ABC”、“12”和“45”的行。但我不想在“ABC”的前五栏中打勾。所以我写了这个正则表达式:忽略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,.
(.*?,)(.*?,)(.*?,)(.*?,)(.*?,).*,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
命令将放弃某些行。