忽略grep正则表达式中的前五列

时间:2015-11-19 07:25:58

标签: regex grep

我有一个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

应匹配

2 个答案:

答案 0 :(得分:0)

使用tail和pipe输出到grep可以做到,     tail -n +5 in.csv|grep 'ABC'|grep '12'|grep '45' 这里+5表示5之后的所有行

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

如果你想匹配任何一个匹配grep OR可以做魔术    grep 'ABC\|12\|45'

答案 1 :(得分:0)

Grep跳过第一列和第二列

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