Невозможно сопоставить двоеточие с помощью grep regexp

-5

У меня большой ASCII файл. Каждая строка содержит поле типа:

"id":"N119PM-1442267121-144-0"  

Двойные кавычки фактически находятся в файле, а не в моем добавлении. Поля разделяются запятыми, но они не обязательно отображаются в одном порядке от линии к строке, а это означает, что использование разреза не является жизнеспособным вариантом.

Я использую:

grep -o '"id":"[A-Aa-z0-9-]\+' <filename>  

и он работает для типа поля, показанного выше. Но есть проблема. Большое количество этих полей выглядит так:

"id":"JBU19-1442091600-schedule-0000:4"  

Другими словами, у них есть дополнительный двоеточие и число в конце. Я не смог выбрать поля с этими дополнительными символами.

Я пробовал:

grep -o '"id":"[A-Aa-z0-9:-]\+' <filename>  
grep -o '"id":"[A-Aa-z0-9\:-]\+' <filename>
grep -o '"id":"[A-Aa-z0-9-]\+\(:[0-9]\+\)' <filename>

безуспешно. Любая помощь будет оценена по достоинству.

EDIT: Я также попытался изменение: на% сначала, а затем на поиск%, но это тоже не сработало.

спросил(а) 2021-01-19T21:22:34+03:00 6 месяцев, 1 неделя назад
1
Решение
89

Если вы используете GNU GREP, вы можете использовать -P в команде grep

grep -oP '"id":"[A-Za-z0-9-:]+"' <filename>
"id":"N119PM-1442267121-144-0"
"id":"JBU19-1442091600-schedule-0000:4"

-P, - -P erl-regexp PATTERN - регулярное выражение Perl

ответил(а) 2021-01-19T21:22:34+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема