Existem várias maneiras de fazer isso. Por exemplo:
-
grep
grep -oP 'BIG\*20021208\*00001\**\K[A-Z0-9-]+' fileExplicação
O
-ofaz o grep imprimir apenas a parte correspondente de uma linha e o-Pativa Expressão regular compatível com Perl Sintaxe (PCRE). O\Knos PCREs faz com que o que foi correspondido até aquele ponto seja descartado (e, portanto, não seja impresso, por causa de-o).[A-Z0-9-]é uma classe de caracteres que corresponde a qualquer letra maiúscula de A a Z, qualquer número ou-e que pode ser repetido uma ou mais vezes (+).Se as strings de destino também puderem conter letras minúsculas, basta executar grep com o sinal
-iou alterar a classe de caracteres para[a-zA-Z0-9-].--- ou ---
grep -oP 'BIG\*20021208\*00001\**\K.+(?=…)' fileExplicação
Isso é exatamente como acima, mas aqui há uma antecipação positiva (
(?=…)), o que significa que.+corresponderá apenas se preceder a…. -
sed
sed -rn 's/…//g;s/.*BIG\*20021208\*00001\**//p;' fileExplicação
O
s/from/to/é o operador de substituição do sed. Ele substituifromporto. O primeiro substitui…por nada, ele os exclui (oggarante que isso seja feito para todas as correspondências na linha). O segundo exclui tudo, desde o início da linha (.*) atéBIG*20021208*00001(*tem um significado especial em expressões regulares, portanto, precisa ser escapado com\*) e, em seguida, 0 ou mais asteriscos (% código%). Combinados, eles excluem tudo, exceto o que você deseja.O
\**suprime a impressão de qualquer saída. O-nno final do segundo operador de substituição faz com que o sed imprima todas as mentiras em que a substituição foi bem-sucedida. -
awk
awk -F'[*…]' '/BIG\*20021208\*00001\**/{print $(NF-1)}' fileExplicação
O separador de campos de entrada do
pset do awk para-Fou*. Isso significa que o penúltimo campo será o que você deseja. O comando acima imprime em linhas que correspondem a…. -
Perl
perl -lne '/BIG\*20021208\*00001\**(.*)…/ && print "$1"' fileExplicação
O
BIG*20021208*00001*faz o perl ler sua linha de entrada por linha e aplicar o script dado por-na ele. O-eadiciona um caractere de nova linha a cada chamada-l. O comando acima tentará corresponder à cadeia de interesse (veja a explicação do exemplo sed acima) e imprimi-lo se for bem-sucedido.Você também pode usar a mesma abordagem do exemplo do awk:
perl -F'[*…]' -lane '/BIG\*20021208\*00001\**/ && print "$F[$#F]"' file