Você está procurando a diretiva \K para esquecer as coisas que acabou de combinar.
grep -oP 'is the.*?blah:\K\d+'
Então sort -u
Aqui está um exemplo de bloco de texto de um arquivo:
Now is the time for all blah:1; to come to the aid
Now is the time for all blah:1; to come to the aid
Now is the time for all blah:1; to come to the aid
Now is the time for all blah:10; to come to the aid
Go to your happy place blah:100; to come to the aid
Go to your happy place blah:4321; to come to the aid
Go to your happy place blah:4321; to come to the aid
Now is the time for all blah:4321; to come to the aid
Now is the time for all blah:9876; to come to the aid
Now is the time for all blah:108636; to come to the aid
Now is the time for all blah:1194996; to come to the aid
Pergunta: Como eu extrairia todos os números exclusivos das linhas que têm "é o" neles?
Eu tentei usar grep -o -P -u '(?<=blah:).*(?=;) ', mas ele não gosta do ponto e vírgula
Você está procurando a diretiva \K para esquecer as coisas que acabou de combinar.
grep -oP 'is the.*?blah:\K\d+'
Então sort -u
Usando sed :
$ sed -n '/is the/s/^.*blah:\([0-9]*\);.*$//p' file | sort -u
1
10
108636
1194996
4321
9876
A substituição substitui o conteúdo de todas as linhas que contêm a string is the pelo número entre blah: e ; . As linhas que não contêm a string são ignoradas.
cat file | grep "is the" | awk -F':' '{print $2}'|awk -F';' '{print $1}'|sort -u
Tente isto :
grep "is the" file | sed 's/.*blah://;s/;.*//' | sort -u
Explicação :
grep obtém todas as linhas com " is the " (em qualquer parte da linha) sed remove todos antes de " : " e depois de " ; " (você pode usar sed -e 's/.*blah://' -e 's/;.*//' para entender melhor) sort classifica as linhas Tags grep text-processing awk sed