Tengo un par de archivos de texto grandes y en el archivo UNIQS.txt
Tengo una lista de cadenas para grep
de otro archivo. El código que uso es
grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
que no hace nada:el archivo generado está vacío. Pero cuando lo hago
grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
funciona correctamente. Esto me confunde porque no pensé que grep
interpretaría las entradas en UNIQS.txt
como patrones de expresiones regulares sin comillas ni barras y así sucesivamente en el archivo (que no hay). ¿Es el caso en general que si está obteniendo los patrones de un archivo, automáticamente pensará que son patrones de expresión regular?
Editar: En el UNIQS.txt
archivo, hay cadenas separadas por saltos de línea de la forma
HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783
(llamados nombres de plantillas) y el archivo EEP_VSL...
columnas separadas por tabulaciones, con alrededor de 14 columnas y la primera columna es el nombre de la plantilla, así que básicamente quiero extraer la línea correspondiente a cada plantilla en el archivo.
Respuesta aceptada:
El -f
La opción especifica un archivo donde grep lee patrones. Eso es como pasar patrones en la línea de comando (con -e
opción si hay más de una), excepto que cuando llama desde un shell, es posible que deba citar el patrón para evitar que el shell expanda los caracteres especiales.
El argumento -E
o -F
o -P
, si lo hay, le dice a grep en qué sintaxis están escritos los patrones. Sin argumentos, grep espera expresiones regulares básicas; con -E
, grep espera expresiones regulares extendidas; con -P
(si se admite), grep espera expresiones regulares de Perl; y con -F
, grep espera cadenas literales. No importa si los patrones provienen de la línea de comando o de un archivo.
Tenga en cuenta que las cadenas son subcadenas:si pasa a+b
como patrón, luego una línea que contiene a+b+c
está emparejado. Si desea buscar líneas que contengan exactamente una de las cadenas proporcionadas y no más, pase -x
opción.