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>

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 *


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 '^[^:]+'

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.

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.