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.