Вот одно решение с perl
$ echo 'foo=bar=baz/quux' | perl -pe 's|^([^=]+=){2}\K[^=/]+/||'
foo=bar=quux
$ echo 'abc=foo=bar=baz/quux' | perl -pe 's|^([^=]+=){2}\K[^=/]+/||'
abc=foo=bar=baz/quux
Как видно из приведенных выше примеров, это ограничивает удаление текста только со 2-го =
до /
^([^= ]+=){2}\K
от начала строки найти последовательность 2
текста, отличного от =
, за которым следует =
. \K
означает положительный просмотр назад, а не часть строки замены[^=/]+/
означает один или несколько символов, отличных от =/
, заканчивающихся на /
То же решение с sed
$ echo 'foo=bar=baz/quux' | sed -E 's|^(([^=]+=){2})[^=/]+/|\1|'
foo=bar=quux
$ echo 'abc=foo=bar=baz/quux' | sed -E 's|^(([^=]+=){2})[^=/]+/|\1|'
abc=foo=bar=baz/quux
Он не поддерживает конструкции просмотра вперед/назад, поэтому при замене используется группа захвата и обратная ссылка