grep -oE "Number_\w+" | sort -u
Suponha que eu tenha um arquivo com o seguinte texto:
Como posso usar um regexp para imprimir apenas uma vez cada
grep -oE "Number_\w+"
Me dá de volta todos os jogos:
Number_1
Number_3
Number_1
Number_4
Mas eu quero a seguinte saída:
Number_1
Number_3
Number_4
grep -oE "Number_\w+" | sort -u
(Ah ok, a edição muda um pouco a questão.)
A maneira fácil de imprimir apenas uma cópia de cada linha de saída é percorrer sort -u
(ou sort | uniq
), embora isso obviamente ordene a saída.
Outras soluções relacionadas aqui: Imprimindo linhas exclusivas
(A resposta para o que eu pensava originalmente era a questão :)
Para imprimir apenas a primeira string que corresponde à regex, podemos usar
grep -m1 ...
:
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines.
Se as correspondências estiverem em linhas diferentes, isso funciona diretamente, mas
Se você tiver várias sequências correspondentes na mesma linha, com -o
, todas elas serão impressas, então adicione algo como | head -1
.
Com o GNU grep
:
$ echo Number_1 Number_2 | grep -Pom1 '^.*?\KNumber_\d+'
Number_1
Isso corresponde do início da linha até a primeira ocorrência de Number_\d+
, mas com \K
, descarta o que está à esquerda dele.
$ awk '{print $NF}' file | sort -u
Number_1
Number_3
Number_4
$ awk '{Arr[$NF]++}END{for(i in Arr)print i}' file
Number_3
Number_4
Number_1
Tags grep