Procurando strings em arquivos

2

Eu tenho um monte de strings que eu preciso encontrar em alguns arquivos, por exemplo:

string1
string2
stringn

file1.txt
file2.txt
filen.txt

Existe uma maneira (fácil) de fazer isso em bash? Eu preciso saber, se uma string foi encontrada, em qual arquivo é.

    
por MauJFernandez 28.04.2011 / 17:09

6 respostas

7

Comando grep simples com a opção -e:

 grep -e "string1" -e "string2" -e "stringn" file*.txt

Ou você pode colocar todas as strings de pesquisa em um arquivo chamado search.txt assim:

string1
string2
string3
...
...
stringN

e, em seguida, execute o grep assim com a opção -f :

grep -f search.txt file*.txt
    
por 28.04.2011 / 17:17
4

Use o grep para pesquisar todas as strings em uma passagem:

grep -E -H 'string1|string2|stringn' file1.txt file2.txt filen.txt

O -E permite usar o caractere de pipe (|) sem escapar dele. O -H imprime o nome do arquivo para cada correspondência. A expressão regular usa pipes para separar cada string, para que grep tente corresponder a cada uma em ordem.

    
por 28.04.2011 / 17:19
3

Existe uma variante do grep que suporta este recurso para grandes conjuntos de strings, tente

fileWithListOfSearchTargets=myFileOfSearchTargets.txt

fgrep -f ${fileWithListOfSearchTargets} file1 file2 ... filen

(A variável e os nomes dos arquivos devem ser auto-documentados, você pode usar qualquer nome que quiser)

Você precisa inserir todas as strings de pesquisa no arquivo.

Sem espaços à esquerda ou à direita, a menos que você espere que eles correspondam à sua lista de arquivos. Há um limite para o tamanho que a maioria dos fgrep s pode processar. Não tente empinar 10 mil linhas em um arquivo.

Espero que isso ajude.

P.S. como você parece ser um novo usuário, se você obtiver uma resposta que ajude você lembre-se de marcá-lo como aceito, e / ou dê um + (ou -) como uma resposta útil.

    
por 28.04.2011 / 17:24
0

A melhor maneira é usar o grep:

grep -H 'string to search' file1.txt file2.txt filen.txt

pesquisará os arquivos especificados por uma string e imprimirá as linhas correspondentes junto com o nome do arquivo onde a correspondência foi encontrada.

    
por 28.04.2011 / 17:12
-2

Comando find do Unix:

find . -exec grep "i want to find this string" '{}' \; -print

pesquisará a partir do diretório atual.

Isso também funciona:

egrep -r 'arbitrary string' *
    
por 28.04.2011 / 17:12
-2
egrep "(string1|string2|string3)" file{1..3}.txt
    
por 28.04.2011 / 20:03