Aqui estão algumas maneiras. Nos exemplos abaixo, estou usando echo
para imprimir a string específica da sua resposta, mas você pode substituir o echo 'blah blah' | command
por sudo tcpdump -Aq -i lo udp port 1234 | command
.
-
awk
$ echo 'E..".J@[email protected]~.........v.....!HELLO' | awk -F'!' '{print $NF}' HELLO
awk
divide as linhas de entrada em campos dividindo o caractere dado como-F
. Nesse caso,!
.$NF
é uma variável especial que significa o último campo. Então, o comando acima, pega!
como o separador de campo e imprime o último campo, ou seja, o que vier depois do último!
. -
grep
echo 'E..".J@[email protected]~.........v.....!HELLO' | grep -oP '!\K.+?$'
O sinalizador
-o
faz com quegrep
imprima apenas a parte correspondida da linha e-P
ativa Expressões regulares compatíveis com Perl, o que nos dá\K
. O regex está procurando por um!
e a seqüência mais curta possível (.+?
, o?
faz com que ele procure o menor) até o final da linha ($
). O\K
significa: descarte o que foi correspondido antes do\K
. O resultado é que o!
(que é anterior ao\K
) é descartado e somente oHELLO
é impresso. -
cut
echo 'E..".J@[email protected]~.........v.....!HELLO' | cut -d'!' -f2
cut
é um utilitário que, bem, corta linhas. Neste caso, estou definindo o delimitador de campo como!
e imprimindo o segundo campo, oHELLO
. -
perl
echo 'E..".J@[email protected]~.........v.....!HELLO' | perl -pe 's/.+\!//'
O
-p
significa "imprimir todas as linhas depois de aplicar o script fornecido com-e
a ele". O próprio script usa o operador de substituição (s/pattern/replacement/
) para substituir tudo até o último!
(aqui, pois não há?
, o.+
corresponderá à maior cadeia possível) sem nada, deixando efetivamente apenas oHELLO
.