Obter o número da linha enquanto usa grep

360

Estou usando grep recursive para pesquisar arquivos por uma string, e todos os arquivos correspondentes e as linhas que contêm essa string são impressos no terminal. Mas é possível obter os números dessas linhas também?

ex: atualmente o que recebo é /var/www/file.php: $options = "this.target", mas o que estou tentando obter é /var/www/file.php: 1142 $options = "this.target";, bem, onde1142 estaria o número da linha que contém essa string.

A sintaxe que estou usando para grep recursivamente é sudo grep -r 'pattern' '/var/www/file.php'

Mais uma pergunta é: como obtemos resultados diferentes de um padrão. Como todos os arquivos, mas não os que têm uma determinada string?

sai
fonte
A bandeira -v irá mostrar as linhas que não correspondem (grep -v myText MyFile.txt)
bcarroll

Respostas:

546
grep -n SEARCHTERM file1 file2 ...
Miro A.
fonte
Eu tive outra pergunta rápida: como obtemos resultados diferentes de um padrão. Como todos os arquivos, mas não os que têm uma determinada string?
Sai
5
isso seria a opção de linha de comando -v. Se você executar 'grep --help', ele exibirá todas as opções
Miro A.
56
Você não precisa -rse especificar vários arquivos. Você só precisa -rse especificar diretórios.
Sparhawk
@ JeanPaul - Eu vejo o mesmo resultado para ambos -nr e -n -r. Qual versão do grep você está usando? $ grep -n -r nome * | wc -l 1984 $ grep -nr nome * | wc-l 1984 $ grep -V grep (grep BSD) 2.5.1-FreeBSD
Miro A.
Código apenas resposta, sem explicação. : S
Florian Castelain
148

Os números de linha são impressos com grep -n:

grep -n pattern file.txt

Para obter apenas o número da linha (sem a linha correspondente), pode-se usar cut :

grep -n pattern file.txt | cut -d : -f 1

As linhas que não contêm um padrão são impressas com grep -v:

grep -v pattern file.txt
Carlito
fonte
3
Eo número da linha última Coincidindo: grep -n pattern file.txt | cut -d : -f 1 | tail -1(você pode salvar este a uma variável e usá-lo para, por exemplo arquivo cauda dela)
Nux
E para remover o número / dois pontos no início de cada string, você pode usar algo como:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon
24

Se você deseja apenas o número da linha, faça o seguinte:

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

Exemplo:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023
Cloud Falls
fonte
11
awk -F: '{print $1}'também trabalha e você não precisa -rem grepquando usado em arquivos (apenas os diretórios podem ser pesquisados de forma recursiva)
Stuart Cardall
7
grep -A20 -B20 pattern file.txt

Pesquise o padrão e mostre 20 linhas após e antes do padrão

emilio
fonte
11
Isso não é o que foi solicitado.
Jonathon Reinhart
3
Além disso, -C20é uma versão mais curta, se é isso o que se queria
Marty Neal
0

Diretório grep -nr "search string"

Isso fornece a linha com o número da linha.

cara aleatório
fonte
0

Para exibir os resultados com os números de linha, você pode tentar isso

grep -nr "word to search for" /path/to/file/file 

O resultado deve ser algo como isto:

linenumber: other data "word to search for" other data
Fouad Djebbar
fonte