Expressão de Grep com nomes de arquivos especiais

1

Eu tenho que passar por alguns arquivos regulares em diretórios e encontrar esses arquivos, que têm seu próprio nome em seu conteúdo.

Na parte de script a seguir, há um ciclo no qual estou passando por caminhos e usando o grep para encontrar o nome do arquivo em seu conteúdo. O que é certamente correto é $ alguma coisa: q - é uma matriz de caminhos onde eu tenho que encontrar arquivos. A próxima variável é o nome no qual é apenas o nome do arquivo atual. por exemplo: /home/computer/text.txt (caminhos) e: text.txt (nome)

E meu maior problema é encontrar nomes de arquivos em seu conteúdo. É muito difícil escrever grep correto para isso, porque os nomes dos arquivos e diretórios pelos quais estou passando são loucos. Aqui estão alguns deles:

/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/!_1
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/dam/$user/:e/'/-r
/home/OS/pocitacove/testovaci_adresar/z/test3/skusime/ taketo/   taketo
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/.a=b
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/@
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/:
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/'ano'

foreach paths ($something:q)
    set name = "$paths:t"
    @ number = ('grep -Ec "$name" "$paths"')

    if ($number != 0) then
        echo -n "$paths "
        echo $number
    endif

    @ number = 0
end
    
por user2919185 26.10.2013 / 12:09

1 resposta

1

Se eu entendi corretamente, seu problema é que os nomes dos arquivos estão sendo interpretados como metacaracteres de expressão regular. Nesse caso, você deseja que a -F mude para grep (que é especificado por POSIX). Ele diz grep para interpretar seu padrão como uma string fixa em vez de uma regex:

@ number = ('grep -Fc -- "$name" "$paths"')

Observe também a adição de -- para especificar "fim de opções" para grep para contornar nomes de arquivos que começam com - . Observe também que a opção -E , que ativa expressões regulares estendidas, não é mais necessária.

    
por 26.10.2013 / 22:22