Como obter o número da linha do grep?

18

O seguinte grep

grep -r -e -n coll *

Exibirá

fullpath/filename:  <tag-name>coll</tag-name>

Gostaria de saber qual linha tem o seguinte texto, tentei adicionar -n, mas não funcionou. Eu tentei adicionar | grep -n *, mas fez algo estranho.

O que eu gostaria de ver (não me importo com o formato) é

fullpath/filename:10:  <tag-name>coll</tag-name>
UAdapter
fonte
11
Vejo números de linha ao usar a -nopção Você pode postar a saída do que recebe?
Kris Harper

Respostas:

18

Você deve colocar -eno final da lista de opções:grep -rne coll *

lgarzo
fonte
15

não há necessidade de -r & -e!

obter o número da linha de um padrão!

grep -n "pattern" file.txt

se você deseja obter apenas o número da linha como saída, adicione outro comando grep!

grep -n "pattern" file.txt | grep -Eo '^[^:]+'
Jonah
fonte
11
Para obter apenas o número da linha, é mais fácil de usar cut, por exemplocut -f1 -d:
wjandrea
1

Para saudar um padrão em um arquivo específico e obter as linhas correspondentes:

grep -n <Pattern> <File> | awk -F: '{ print $1 }' | sort -u

ou usando cutcomo sugerido por @wjandrea:

grep -n <Pattern> <File> | cut -f1 -d: | sort -u

Onde

  • <Pattern>é um padrão glob citado (use a opção -Epara regexp);
  • <File> é o arquivo no qual você está interessado;
  • o primeiro canal awk ...filtra os números das linhas na saída de grep (antes :em cada linha);
  • o segundo canal garante que os números das linhas apareçam apenas uma vez.
Sheljohn
fonte
Para obter apenas o número da linha, é mais fácil de usar cutdo que Awk, por exemplocut -f1 -d:
wjandrea
@wjandrea Mais fácil de que maneira?
27718 Sheljohn
Quero dizer a sintaxe é simples
wjandrea
@wjandrea Isso parece muito objetivo.
27418 Sheljohn
@wjandrea Desculpe pelo sarcasmo, eu editado para incluir a sua sugestão :)
Sheljohn