Невозможно сопоставить двоеточие с помощью grep regexp
У меня большой 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: Я также попытался изменение: на% сначала, а затем на поиск%, но это тоже не сработало.
Если вы используете 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