Se o que você está tentando fazer é exibir tudo entre e incluindo senderID= e WaveShow, , você precisa deste comando sed :
sed -n 's/.*\(senderID=.*WaveShow,\).*//p'
Isso capturará tudo entre essas duas strings usando os colchetes \( e \) e a saída usando (e etc., se você tiver mais capturas).
Observe que o .* principal é "ganancioso", o que significa que se você tiver a string senderID= duas vezes na entrada, a primeira será descartada. Se isso não é o que você quer, então sed não é a ferramenta correta; perl pode lidar com isso. O comando então se torna:
perl -ne 'print if s/.*?(senderID=.*WaveShow,).*/$1/'
-n significa "executar um loop para cada linha de entrada e não imprimir a linha no final do loop". -e especifica a expressão a ser executada dentro do loop.
O ? após o .* altera o * para corresponder o mínimo possível (ou seja, corresponde de forma não voraz). Os colchetes fazem o perl agrupar essa parte e capturá-la, o que pode ser usado como $1 para a primeira captura, $2 para a segunda, etc.
No entanto, essa não é a maneira ideal de fazer isso em perl. Isso é muito melhor, pois não envolve a mudança desnecessária de strings, capturando o texto e imprimindo exatamente isso:
perl -ne 'print "$1\n" if /(senderID=.*WaveShow,)/'
Provavelmente existem muitas outras maneiras de fazer isso no perl, talvez até de maneira mais eficiente.