Регулярні вирази бувають найрізноманітніших смаків. Що ви показуєте, це регулярний вираз Perl (PCRE, "Perl Compatible Regular Expression").
grepвиконує регулярні вирази POSIX. Це основні регулярні вирази (BRE) та розширені регулярні вирази (ERE, якщо grepвони використовуються з -Eопцією). Дивіться посібник для re_formatабо regexбудь-якого подібного посібника, до якого grepпосилається посібник у вашій системі, або стандартні тексти POSIX, до яких я тільки що посилався.
Якщо ви використовуєте GNU grep, ви могли б використовувати Perl-подібні регулярні вирази, якби ви використовували опцію grepGNU grep-specific -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-подібні системи.