two - multiple grep filter
Grep apenas o primeiro jogo e parar (3)
Estou pesquisando um diretório recursivamente usando o grep com os seguintes argumentos esperando retornar apenas a primeira correspondência. Infelizmente, ele retorna mais do que um - de fato dois da última vez que olhei. Parece que tenho muitos argumentos, especialmente sem obter o resultado desejado. : - /
# grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/directory
retorna:
Pulsanti Operietur
Pulsanti Operietur
Talvez grep não seja a melhor maneira de fazer isso? Você me diz, muito obrigado.
Meu programa grek-a-like ack
tem uma opção -1
que pára na primeira partida encontrada em qualquer lugar. Ele suporta o -m 1
que @mvp também se refere. Eu coloquei lá porque se eu estou procurando uma grande árvore de código-fonte para encontrar algo que eu sei que existe em apenas um arquivo, é desnecessário encontrá-lo e tem que pressionar Ctrl-C.
Um único liner, usando find
:
find -type f -exec grep -lm1 "PATTERN" {} \; -a -quit
-m 1
significa devolver a primeira correspondência em qualquer arquivo. Mas continuará a pesquisar em outros arquivos. Além disso, se houver duas ou mais correspondências na mesma linha, todas elas serão exibidas.
Você pode usar a head -1
para resolver este problema:
grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/dir | head -1