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