Lendo padrões grep de um arquivo

39

Eu tenho alguns arquivos de texto grandes e no arquivo UNIQS.txt eu tenho uma lista de strings para grep de outro arquivo. O código que eu uso é

grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam

que não faz nada - o arquivo gerado está vazio. Mas quando eu faço

grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam

funciona corretamente. Isso me confunde porque eu não achei que grep iria interpretar as entradas em UNIQS.txt como regexp padrões sem aspas e barras e assim por diante estando no arquivo (que não existem). É o caso em geral de que, se você estiver obtendo os padrões de um arquivo, ele automaticamente achará que eles são regexp padrões?

Editar: No arquivo UNIQS.txt , há sequências separadas de nova linha no formulário

HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783

(chamado de nomes de modelo) e o arquivo EEP_VSL... separa colunas, com cerca de 14 colunas e a primeira coluna é o nome do modelo, então basicamente eu quero extrair a linha correspondente a cada modelo no arquivo.

    
por sdf 16.07.2013 / 20:01

1 resposta

49

A opção -f especifica um arquivo onde o grep lê padrões. Isso é como passar padrões na linha de comando (com a opção -e se houver mais de um), exceto que quando você está chamando de um shell você pode precisar citar o padrão para proteger os caracteres especiais de serem expandidos por o shell.

O argumento -E ou -F ou -P , se houver, informa ao grep em que sintaxe os padrões são gravados. Sem argumento, o grep espera expressões regulares básicas ; com -E , o grep espera expressões regulares estendidas ; com -P (se suportado), o grep espera expressões regulares Perl ; e com -F , o grep espera sequências literais. Se os padrões vêm da linha de comando ou de um arquivo, não importa.

Observe que as strings são substrings: se você passar a+b como padrão, uma linha contendo a+b+c será correspondida. Se você quiser procurar linhas contendo exatamente uma das strings fornecidas e não mais, então passe a opção -x .

    
por 17.07.2013 / 03:36

Tags