apenas encontra resultados únicos no grep

2

Estou usando algumas palavras em um arquivo com este comando

grep -iE "(foo|bar|test|something)" filename.txt

Isso funciona bem, mas é encontrar TODAS as ocorrências para as palavras encontradas. Por exemplo, se foo for encontrado 8 vezes, todos os 8 resultados serão exibidos.

É possível mostrar apenas resultados exclusivos? Talvez mostre o primeiro.

    
por Anthony 04.08.2016 / 01:20

1 resposta

1

Existe uma opção para mostrar apenas a primeira correspondência. Observe:

$ grep -iE "(foo|bar|test|something)" filename.txt
Foo 1
Bar 2
foo 3
Foo 4

Agora, para restringir isso à primeira correspondência, adicione -m1 :

$ grep -iEm1 "(foo|bar|test|something)" filename.txt
Foo 1

Uma limitação é que isso mostrará apenas a primeira correspondência, não o primeiro foo e também o primeiro bar , etc.

Imprimindo a primeira de várias correspondências diferentes

Considere este arquivo de teste:

$ cat filename.txt
Foo 1
Bar 2
foo 3
Foo 4
test 5
test 6

Para imprimir a primeira correspondência para cada uma das três expressões regulares mostradas:

$ awk -v a='[fF]oo [bB]ar [tT]est' 'BEGIN{split(a,b," ")} {for (i in b) if ($0~b[i] && !c[i]) {print; c[i]++}}' filename.txt
Foo 1
Bar 2
test 5

Isso funciona colocando as expressões regulares que você deseja corresponder na variável a . a é dividido em palavras e colocado na matriz b . Cada uma das regexes em b é testada em cada linha e somente a primeira correspondência para cada uma é impressa.

    
por 04.08.2016 / 01:24

Tags