Números da linha de saída do Linux onde a correspondência de cadeia aparece

0

o que eu estou procurando fazer é aumentar o comando Eu já tenho que retornar números de linha de onde a string especificada aparece:

grep -r -l -n -w "ePKI" /home/websites/www/* > /home/keywords.txt

O comando acima retorna nomes de arquivos como

filename_where_keyword_appears_01.txt
filename_where_keyword_appears_02.txt
etc

E o que eu gostaria de fazer é retornar o número da linha de onde a string aparece no arquivo também, como:

filename_where_keyword_appears_01.txt 12 45 67 89

Alguém poderia me aconselhar sobre como melhorar meu comando para fazer algo assim?

    
por barntothemax 10.07.2013 / 11:30

2 respostas

1

Você pode obter resultados semelhantes ao que deseja omitindo -l e usando o recorte da seguinte forma:

grep -r -n -w "ePKI" /home/websites/www/*|cut -d':' -f 1,2 > /home/keywords.txt

Se você precisa que a saída seja exatamente como você descreveu, você poderia tentar com o awk:

awk -F, 'FNR==1 {printf "\n%s",FILENAME};/ePKI/ {printf " %d ",NR} END {printf "\n"}' /home/websites/www/*

Combine isso com encontrar para recursão:

find /home/websites/www/* -type f -print0 | xargs -0 awk -F, 'FNR==1 {printf "\n%s",FILENAME};/ePKI/ {printf " %d ",NR} END {printf "\n"}'
    
por 10.07.2013 / 15:03
0

A opção -l suprime a saída normal e imprime apenas o nome do arquivo. Omitir opção -l e manter a opção -n para ver o nome do arquivo e os números de linha. Além disso, você verá a linha correspondente ou apenas a parte correspondente ao especificar a opção -o .

    
por 10.07.2013 / 14:17