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