No Windows, eu teria feito uma pesquisa para encontrar uma palavra dentro de uma pasta. Da mesma forma, quero saber se uma palavra específica ocorre dentro de um diretório que contém muitos subdiretórios e arquivos. Minhas pesquisas pela sintaxe grep mostram que devo especificar o nome do arquivo, ou seja grep string filename
.
Agora, não sei o nome do arquivo, então o que devo fazer? Um amigo sugeriu que fizesse grep -nr string
, mas não sei o que isso significa e não obtive resultados (não há resposta até eu emitir a ctrl + c).
*
? Isso resultará na expansão do curinga do shell (se houver nomes de arquivos correspondentes ao padrão do curinga) ou o grep o considerará como operador de repetição de 0 ou mais para o caractere anterior*
.grep -nr MobileAppSer* .
1. Suponha que temos 3 arquivos no diretório atual correspondênciaMobileAppSer*
padrão de curinga: chamadaMobileAppServlet.java
,MobileAppServlet.class
,MobileAppServlet.txt
. Em seguida,grep
será chamado desta forma:grep -nr MobileAppServlet.class MobileAppServlet.java MobileAppServlet.txt .
. Significa procurar o texto "MobileAppServlet.class" nos arquivos MobileAppServlet.java, MobileAppServlet.txt e em outras partes do diretório atual - o que certamente não é o que o usuário deseja aqui.MobileAppSer*
padrão curinga,grep
receberá o argumentoMobileAppSer*
como está e, portanto, o utilizará como pesquisa pelo texto "MobileAppSe" seguido por 0 ou mais ocorrências de "r", portanto, ele receberá tente encontrar textos "MobileAppSe", "MobileAppSer", "MobileAppSerr", "MobileAppSerrr" etc. etc. no conteúdo dos arquivos do diretório atual - e também não no que o usuário deseja.Notas adicionais: isso satisfaz a sintaxe,
grep [options] string filename
porque em sistemas do tipo Unix, um diretório é um tipo de arquivo (existe um termo "arquivo regular" para se referir especificamente a entidades que são chamadas apenas de "arquivos" no Windows).grep -nr string
lê o conteúdo a ser pesquisado a partir da entrada padrão, é por isso que apenas aguarda a entrada de você e para de fazê-lo quando você pressiona ^ C (também seria interrompido em ^ D, que é a combinação de teclas para final de -Arquivo).fonte
grep -inr "my word" .
-r
for grep significa pesquisar nos subdiretórios recursivamente e-n
significa prefixar cada linha de saída com o número da linha correspondente do arquivo que contém essa linha.man grep
descreve tudo isso e muito mais.GREP : Global Expression Regular Print / Parser / Processor / Program.
Você pode usar isso para pesquisar o diretório atual.
Você pode especificar -R como "recursivo", o que significa que o programa pesquisa em todas as subpastas, subpastas e subpastas, etc.
-n
imprimirá o número da linha, onde ele correspondeu no arquivo.-i
procurará sem distinção entre maiúsculas e minúsculas (maiúsculas / minúsculas).fonte
fará uma pesquisa RECURSIVE (ou seja, o diretório e todos os seus subdiretórios) pela search_string. (conforme corretamente respondido por usta).
O motivo pelo qual você não recebeu nenhuma resposta com a sugestão de seu amigo de:
é porque nenhum diretório foi especificado. Se você estiver no diretório em que deseja fazer a pesquisa, faça o seguinte:
É importante incluir o '.' caractere, pois isso indica ao grep para pesquisar neste diretório.
fonte
Há também:
mas isso pode ser um pouco demais para um iniciante.
find
é um diretório de uso geral walker / lister,-type f
significa "procure arquivos simples em vez de diretórios e pipes nomeados e o que você tem",-print0
significa "imprima-os na saída padrão usando caracteres nulos como delimitadores". A saída defind
é enviada paraxargs -0
e que agarra sua entrada padrão em chunks (para evitar limitações de comprimento de linha de comando) usando caracteres nulos como separador de registros (em vez da nova linha padrão) e se aplicagrep -li word
a cada conjunto de arquivos. Nogrep
,-l
significa "lista os arquivos que correspondem" e-i
significa "não faz distinção entre maiúsculas e minúsculas"; geralmente você pode combinar opções de caracteres únicos para ver com-li
mais frequência-l -i
.Se você não usar
-print0
e-0
terá problemas com nomes de arquivos que contêm espaços, portanto, usá-los é um bom hábito.fonte
man find
na linha de comando para ver quais opções seufind
suporte.Por que não fazer uma pesquisa recursiva para encontrar todas as instâncias nos subdiretórios:
Isso funciona como um encanto.
fonte
grep -r "yourstring" *
Encontrará "yourstring" em todos os arquivos e pastasAgora, se você deseja procurar duas cadeias diferentes ao mesmo tempo, sempre pode usar a opção E e adicionar palavras para a pesquisa. exemplo após o intervalo
grep -rE "yourstring|yourotherstring|$" *
procurará por locais da lista ondeyourstring
ouyourotherstring
correspondefonte
Outra opção que eu gosto de usar:
-type f retorna apenas arquivos e não pastas
-exec e {} executa o grep nos arquivos encontrados na pesquisa (a sintaxe exata é "-exec command {}").
fonte
-R também segue links simbólicos quando -r não.
fonte
A resposta que você selecionou é boa e funciona, mas não é a maneira correta de fazê-lo, porque:
Na verdade, isso pesquisa a string
"yourStrin"
e"g"
0 ou várias vezes.Portanto, a maneira correta de fazer isso é:
Este comando pesquisa a cadeia com qualquer caractere antes e depois na pasta atual.
fonte
grep -nr yourString
funciona também, como ele procura o nuyourString
em qualquer lugar na linha (ou pelo menos ele faz no meu sistema, OSX Lion)Semelhante à resposta postada por @eLRuLL, uma maneira mais fácil de especificar uma pesquisa que respeite os limites das palavras é usar a
-w
opção:fonte
Execute (terminal) o seguinte comando dentro do diretório Ele também verificará recursivamente os subdiretórios.
fonte
Os seguintes aparência de amostra de forma recursiva para
your search string
no*.xml
e*.js
arquivos em algum lugar localizado dentro das pastaspath1
,path2
epath3
.Assim, você pode procurar em um subconjunto dos arquivos por muitos diretórios, fornecendo apenas os caminhos no final.
fonte
Não use grep. Faça o download do Silver Searcher ou ripgrep . Ambos são excelentes e muito mais rápidos do que o grep ou o ack com inúmeras opções.
fonte