Como mostrar apenas nomes de arquivos com grep no Linux
grep
é um utilitário Linux para pesquisar arquivos de texto. Por padrão, ele imprimirá os resultados da pesquisa, mas também pode ser usado para corresponder e imprimir nomes de arquivos que contenham o resultado da pesquisa, o que pode ser útil ao conectá-lo a outros scripts.
Usando grep para imprimir nomes de arquivos
grep
é comumente usado junto com outros comandos em scripts bash como um utilitário geral de pesquisa de texto. No entanto, por padrão, ele não imprime nada sobre os nomes dos arquivos, que você pode precisar se estiver passando a saída para outro utilitário.
Se você quiser uma lista dos arquivos correspondentes, você pode usar grep
com o -l
bandeira, que listará os nomes dos arquivos em vez da correspondência:
grep -l foo ./*
Isso é semelhante ao -H
sinalizador, que produzirá uma resposta contendo o nome do arquivo seguido pela linha correspondente. No entanto, com -l
será só imprima o nome do arquivo, fornecendo uma lista de arquivos que contêm a string de pesquisa.
Você também pode usar um maiúscula -L
bandeira para fazer o inverso: imprima todos os arquivos que não contêm a string correspondente.
grep -L baz ./*
Cortando o caminho do arquivo
Por padrão, o -l
sinalizador imprimirá arquivos com um caminho de arquivo relativo pré-anexado. Se você quiser apenas o nome actual do arquivo, você pode cortar o caminho do arquivo usando o basename
Utilitário. Isso exigirá que a entrada seja passada xargs
mas funciona muito bem:
grep -l foo ./* | xargs -L 1 basename
Tenha em mente que grep -r
irá pesquisar recursivamente, e se você usar isso com basename
a resposta pode conter arquivos com caminhos aparados que não estão diretamente na corrente.
Usando grep com o comando in finding
grep
também funciona bem com o utilitário de pesquisa additional do in finding
comando. Por exemplo, você pode usá-lo com o in finding
comando para pesquisar todos os arquivos de texto em um diretório e executar facilmente um grep
procurar:
in finding . -iname "*txt" -exec grep foo ;
Ou use com o -l
sinalizador para listar nomes de arquivos:
in finding . -iname "*txt" -exec grep -lH foo ;
Fonte da Notícia: www.howtogeek.com