Регулярные выражения бывают разных вкусов. То, что вы показываете, представляет собой Perl-подобное регулярное выражение (PCRE, «Perl-совместимое регулярное выражение»).
grep
делает POSIX регулярные выражения. Это базовые регулярные выражения (BRE) и расширенные регулярные выражения (ERE, если grep
используется с -E
опцией). См. Руководство re_format
или regex
аналогичное руководство, на которое grep
ссылается ваше руководство в вашей системе, или стандартные тексты POSIX, на которые я только что ссылался.
Если вы используете GNU grep
, вы сможете использовать Perl-подобные регулярные выражения, если используете опцию, специфичную для grep
GNU .grep
-P
Также обратите внимание, что по умолчанию grep
возвращает строки , а не подстроки из строк. Опять же, с GNU grep
(и некоторыми другими grep
реализациями) вы можете использовать эту -o
опцию, чтобы получать только те биты, которые соответствуют заданному выражению из каждой строки.
Обратите внимание, что оба -P
и -o
являются нестандартными расширениями спецификации POSIXgrep
.
Если вы не используете GNU grep
, sed
вместо этого вы можете использовать бит между строкой prefix
и концом строки:
sed -n 's/.*prefix\(.*\)/\1/p' file
Для этого нужно только напечатать строки, которым sed
удается применить данную замену. Подстановка заменит всю строку, которая соответствует выражению (которое является BRE), тем фрагментом, который следует за строкой prefix
.
Обратите внимание, что если prefix
в строке есть несколько экземпляров , sed
вариант вернет строку после последней , а grep
вариант GNU вернет строку после первой (которая будет включать другие экземпляры prefix
).
sed
Решение будет переноситься на всех Unix-подобные системы.