Existem várias maneiras de fazer isso. Por exemplo:
-
grep
grep -oP 'BIG\*20021208\*00001\**\K[A-Z0-9-]+' file
Explicação
O
-o
faz o grep imprimir apenas a parte correspondente de uma linha e o-P
ativa Expressão regular compatível com Perl Sintaxe (PCRE). O\K
nos 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
-i
ou alterar a classe de caracteres para[a-zA-Z0-9-]
.--- ou ---
grep -oP 'BIG\*20021208\*00001\**\K.+(?=…)' file
Explicaçã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;' file
Explicação
O
s/from/to/
é o operador de substituição do sed. Ele substituifrom
porto
. O primeiro substitui…
por nada, ele os exclui (og
garante 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-n
no 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)}' file
Explicação
O separador de campos de entrada do
p
set do awk para-F
ou*
. 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"' file
Explicação
O
BIG*20021208*00001*
faz o perl ler sua linha de entrada por linha e aplicar o script dado por-n
a ele. O-e
adiciona 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