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.