Como grep várias strings em vários arquivos?

0

Estou tentando usar várias strings em vários arquivos. Isso é no Windows 7 x64, e estou usando o sabor do GNUWin32 .

Eu tenho o grep.bat com este comando:

grep "string1\|string2\|string3\|string4" 20*.csv > out.csv

Na verdade, há 68 strings e são 11 caracteres cada, portanto, a string entre as aspas tem 869 caracteres (isso inclui os delimitadores de 2 caracteres).

O que está acontecendo é que estou obtendo um out.csv , mas tudo o que ele está fazendo é alternar entre 0 bytes e uma cópia do meu comando grep! Hã? Por que o grep está pesquisando um arquivo .bat quando eu explicitamente disse para verificar apenas arquivos que correspondem a 20 * .csv ?

Se eu remover > out.csv e executar o .bat novamente, tudo que eu obtenho é minha linha de comando repetida várias vezes em uma janela de prompt de comando.

    
por Aren Cambre 27.07.2013 / 02:12

2 respostas

0

Use o grep no Ubuntu em uma VM do VirtualBox e acesse o host do Windows usando o recurso Shared Folders do VirtualBox. Este não é o primeiro bug que eu encontrei no grep do GNUWin32.

    
por 27.07.2013 / 04:13
0

Isso funciona no meu grep, deve funcionar em qualquer plataforma. O que você quer fazer é ler os padrões de um arquivo. Aqui está um exemplo (observe o '-f-', isto é, leia os padrões da entrada padrão (-):

$ man grep > grep.txt
$ man cat > cat.txt

$ cat > patterns
terminfo
full
should

(pressione Ctrl + D aqui)

$ cat patterns | grep -f- *.test 
cat.test:       The  full  documentation for cat is maintained as a Texinfo manual.  If
cat.test:       should give you access to the complete manual.
grep.test:              This  version  number should be included in all bug reports (see
grep.test:              should avoid both -q and -s and  should  redirect  standard  and
grep.test:       implementations support \{ instead, so portable scripts should avoid  {
grep.test:       in grep -E patterns and should use [{] to match a literal {.
grep.test:       portable scripts should avoid it.
grep.test:                     terminfo capability  does  not  apply,  when  the  chosen
grep.test:              file name wildcard expansion and therefore should not be treated
grep.test:       pcrepattern(3), terminfo(5), glob(7), regex(7).
grep.test:       The full documentation for grep is maintained as a TeXinfo manual.   If
grep.test:       should give you access to the complete manual.
    
por 27.07.2013 / 04:34