2012-05-31 17 views
8

Estoy utilizando la función grep -f para extraer líneas de un archivo que coinciden con un patrón en particular. Digamos que mi archivo de patrón es pattern.txt, de la siguiente manera.Acerca de 'grep -f': patrón de coincidencia con el archivo

1 
2 
3 
4 
5 

y el archivo contra el que estoy coincidan con este patrón es file.txt,

1::anv 
2::tyr 
3::yui 
4::fng 
5::gdg 
6::ere 
7::rer 
8::3rr 
9::gty 

Ahora cuando hago un grep -f archivo.txt pattern.txt, me estoy haciendo esto ->

1::anv 
2::tyr 
3::yui 
4::fng 
5::gdg 
8::3rr 

La última línea en el resultado anterior está causando mi problema. ¿Cómo modifico este comando grep para obtener el resultado (mostrando las correspondencias correctas) de la siguiente manera?

1::anv 
2::tyr 
3::yui 
4::fng 
5::gdg 
+0

me trataron grep "' más patt.txt'" archivo.txt | awk -F '::' '{print $ 1 "" $ 2}' Pero esto también me da el mismo problema. – ana

Respuesta

12

Añadir ^ antes de que sus patrones para que grep coincidirá con una línea de salida con su patrón. Si su patrón en realidad está configurado en números, no necesita una lista de patrones. Simplemente use ^[1-5]:.

+0

Gracias. eso lo hizo – ana

+4

solo tenga en cuenta que^1 coincidirá con 10 :, etc. si los números llegan a ser tan grandes. –

6

Bueno, hay muchas soluciones posibles. Usted está diciendo grep para encontrar todas las líneas que contienen un 3, y la línea '8 :: 3rr' de hecho contiene un 3. por lo que debe ser más específico en lo que está buscando.

Por ejemplo, puede cambiar los patrones a '1:', '2:', etc. para que coincidan solo con los números seguidos de dos puntos. O puede cambiarlos a '^ 1', '^ 2', etc. para hacer coincidir solo los números al principio de la línea. Depende de sus datos, pero probablemente quiera ambos, de modo que su búsqueda de '1:' no coincida con '21: 'y su búsqueda de'^5 'no coincida con '53:'. En cuyo caso el archivo de patrones le gustaría como esto:

^1: 
^2: 
^3: 
^4: 
^5: