Регулярные выражения бывают разных вкусов. То, что вы показываете, представляет собой Perl-подобное регулярное выражение (PCRE, «Perl-совместимое регулярное выражение»).
grepделает POSIX регулярные выражения. Это базовые регулярные выражения (BRE) и расширенные регулярные выражения (ERE, если grepиспользуется с -Eопцией). См. Руководство re_formatили regexаналогичное руководство, на которое grepссылается ваше руководство в вашей системе, или стандартные тексты POSIX, на которые я только что ссылался.
Если вы используете GNU grep, вы сможете использовать Perl-подобные регулярные выражения, если используете опцию, специфичную для grepGNU .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-подобные системы.