2015-11-19 2 views
0

У меня есть файл csv, и я хочу искать строки, содержащие «ABC», «12» и «45». Но я не хочу проверять первые пять столбцов для «ABC». Так что я написал это регулярное выражение:Игнорирование первых пяти столбцов в grep regex

(.*?,)(.*?,)(.*?,)(.*?,)(.*?,).*,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 

должны соответствовать

+0

попробовать 'Grep -P«^ ((* ?,). . * ?,) (. * ?,) (. * ?,) (. * ?,). * (? <=,) АВС (? =,). *, 12 (? =,). *, 45 ,. * 'in.csv | wc -l ' –

+0

@AvinashRaj Еще нулевые строки – GitCoder

+0

Опубликовать образец ввода .. –

ответ

0

с помощью хвоста и Направьте вывод 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 ИЛИ можете сделать волшебный grep 'ABC\|12\|45'

Смежные вопросы