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?
Respostas:
fonte
-r
se especificar vários arquivos. Você só precisa-r
se especificar diretórios.Os números de linha são impressos com
grep -n
:Para obter apenas o número da linha (sem a linha correspondente), pode-se usar
cut
:As linhas que não contêm um padrão são impressas com
grep -v
:fonte
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)grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
Se você deseja apenas o número da linha, faça o seguinte:
Exemplo:
fonte
awk -F: '{print $1}'
também trabalha e você não precisa-r
emgrep
quando usado em arquivos (apenas os diretórios podem ser pesquisados de forma recursiva)Pesquise o padrão e mostre 20 linhas após e antes do padrão
fonte
-C20
é uma versão mais curta, se é isso o que se queriaDiretório grep -nr "search string"
Isso fornece a linha com o número da linha.
fonte
Para exibir os resultados com os números de linha, você pode tentar isso
O resultado deve ser algo como isto:
fonte