Відповіді:
У Perl (та PCRE) цього можна досягти з нульовою шириною позаду :
(?<=funnyword).*$
який відповідає "смішному слову", але не споживає його як частину матчу. Вони працюють лише з текстом фіксованої довжини в майбутньому. Ви також можете скористатися негативним lookbehinds ( (?<!...)
), щоб вказати, що якогось тексту немає.
У будь-якій досить недавній версії Perl - \K
це майже точний замінник\zs
, який ви використовуєте:
funnyword\K.*$
\K
відкидає все відповідне досі, але продовжує відповідати з цього моменту. Частина раніше \K
не повинна бути фіксованої довжини. Зараз це також є у PCRE , але я не впевнений, у якій версії він увійшов.
\ze
може бути досягнуто замість пошуку нульової ширини замість цього, використовуючи (?=...)
. Цей шаблон не повинен бути фіксованої довжини.
Оскільки sed використовує POSIX BRE , пошуку немає . У цьому випадку, проте, ви можете досить легко їх моделювати за допомогою звичайної групи захоплення:
sed -e 's/\(funnyword\).*$/\1otherword/'
Ви можете зробити те ж саме для позитивного пошуку. Якщо у вас справді є більш складна вимога, можливо, вам доведеться звернути увагу на Perl або якийсь інший підхід.