grep se comportando de maneira diferente no Fedora vs Ubuntu

13

Então, quando eu executo isso no Fedora, vejo isso:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'
2R-ref.alleles

Mas quando eu corro no Ubuntu (mesmos dados) eu não obtenho nenhum resultado do grep:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'

Alguma idéia do que poderia estar acontecendo? Como posso pensar em algo que funcionará da mesma maneira em ambos os sistemas?

    
por Greg_the_Ant 02.10.2014 / 21:06

3 respostas

30
grep -F '-ref.alleles'

é equivalente a:

grep -F -ref.alleles

(nenhum dos caracteres entre os apóstrofos são metacaracteres de shell, então citá-los não tem efeito.)

Por sua vez, isto é equivalente a:

grep -F -r -e f.alleles

pela análise normal das opções - prefixadas. A opção -e aceita um argumento, mas -F e -r não.

Como você não especificou nenhum arquivo para o grep, o comportamento padrão é agir no stdin ... exceto que a opção -r não faz sentido, então o padrão é pesquisar . (o diretório atual) de forma recursiva e ignora stdin. Em algumas versões.

Você precisa usar o indicador -- "não mais opções" antes de um regexp que comece com - como em

grep -F -- -ref.alleles

Eu rastreei o ponto em que o comportamento de -r sem argumentos de arquivo foi alterado. Foi na versão 2.11, lançada em 2 de março de 2012. Veja o anúncio de lançamento.

Os commits que afetaram o comportamento são este e < a href="http://git.savannah.gnu.org/cgit/grep.git/commit/?id=d1d7245219bc56e6a4f25c18d6f8f4b4b9bb42d6"> este .

Se você executar grep --version em suas duas máquinas, tenho certeza que você descobrirá que uma delas está no lado errado de 2.11

    
por 02.10.2014 / 21:35
6

O principal - é o problema. Para obter os mesmos resultados, adicione -- :

grep -F -- '-ref.alleles'

De man bash :

A -- signals the end of options and disables further option
processing. Any arguments after the -- are treated as filenames
and arguments.
    
por 02.10.2014 / 21:30
1

Verifique .bashrc se houver algum alias no seu comando grep que substitua seu comportamento. Talvez seja o problema. Tente também grep sem o parâmetro "-F".

    
por 02.10.2014 / 21:25