Hola a todos, hoy se ha dado la oportunida de escribir algo, y lo haré de los “programas” que nos facilitan mucho la vida, cuando tenemos una consola y una infinidad de datos posibles y no tan posibles y sólo uno es el que buscamos. O el caso contario, buscamos para no encotrar algo, así que algunos ya tienen un nombre para esta acción: filtros
La familia grep
La forma más básica de grep es:
$grep patron archivo
Con lo anterior imprimiremos cada línea que coincida con el patrón asociado. Con grep como herramienta nos ahorraremos muchos dolores de cabeza, ya que permite encontrar ocurrencias dentro de documentos, también sirve para discriminar la salida de los programas.
Por ejemplo:
lyonn@debian:~$ grep bin $PATH
Nos muestra todas las ocurrencias de “bin”, aúnque aún podemos especificar lo contrario, es decir, todo aquello que no coincida, por ejemplo:
lyonn@debian:~$ ls | grep -v terminos
Existen opciones o parámetros que puede recibir grep, como v (todo aquel que no sea), n (número de línea), etc.
El punto de esto no es enseñar a usar grep, egrep o fgrep, ya que sería necesario mucho más que un post para hacerlo. El objetivo primario es explicar las diferencias.
Como todo el mundo sabe, grep puede utilizar expresiones regulares, como por ejemplo:
* Lo que sea
^ Todo aquello que inicie con
Un ejemplo es:
lyonn@debian:~$ ls -l | grep ‘^d’
” fgrep busca muchas cadenlas literales simultaneamente, mientras que egrep interpreta regex verdaderas, lo mismo que grep, pero con un operador “o” y un paréntesis para agrupar expresiones que se que aplican más adelante.
Tango fgrep como egrep aceptal el parámetro -f para especificar un archivo del cual leer la información. EN el archivo, las nuevas-líneas separan los patrones que deben buscarse en paralelo. Por ejemplo, si hay palabras que se escribieron incorrectamente, puede verificarse su ocurrencia manteniendolas en un archivo;
lyonn@debian:~$ fgrep -f documento
Las expresiones regulares interptretadas por egrep son las mismas que grep, con un par de adiciones. Los paréntesis pueden utilizarse para agrupar. Hay dos operadores de cerradura con egrep, como son + y ?. El patron x+ reconoce una o más x y x? reconoce cero o una x, pero jamás varias.
egrep es excelente en juegos de palabras que consiste en buscar en el diccionario de palabras con propiedades especiales.
Podemos servirnos de grep, pero egrep es más rápido para la busqueda de palabras, sobre todo cuando contiene patrones con cerraduras, en especial en archivos enormes.
Ahora viene la pregunta, Por qué existen tres comandos similares?? fgrep no interpreta ningun metacarácter, pero podemos buscar miles de palabras en paralelo (una vez inicializado, el tiempo de ejecución no depende de el número de palabras), de ahí que se use principalmente para busquedas bibliográficas. El tamaño típico de los patrones de fgrep rebasa la capacidad de los algoritmos de egrep y grep. Las diferencias entre egrep y grep son más difíciles de justificar; grep se inventó mucho antes, se sirve de espresiones servidas de ed y tiene expresiones regulares marcadas y un conjunto de opciones más amplio. egrep interpreta expresiones más generales (salvo el marcado) y corre mucho más rápido (con una velocidad independiente del patrón), pero la versión estándar tarda más en empezar cuando la expresión es complicada.”
Esta es una pequeña tabla de regex de grep y egrep (Por orden decreciente de procedencia)
| c |
cualquier caracter no especial “c” concuerda a sí mismo |
| \c |
cancela cualquier significado especial del carácter “c” |
| ^ |
inicio de línea |
| $ |
final de línea |
| . |
cualquier carácter individual |
| [...] |
cualquiera de los carácteres en …; los rangos, como a-z, 0-9, etc |
| [^...] |
cualquier carácter individual que no se encuentre en …; los rangos son válidos |
| \n |
lo que concordó con el n-ésimo \(…\)(grep solamente) |
| r* |
cero o más ocurrencias de r |
| r+ |
una o más ocurrencias de r (egrep solamente) |
| r? |
cero o más ocurrencias de r (egre solamente) |
| r1r2 |
r1 seguida de r2 |
| r1|r2 |
r1 o r2 (egrep solamente) |
| \r(r\) |
expresión regular marcada r ( solamente grep) puede ser una expresión regular anidada (egrep solamente); puede anidarse |
| (r) |
ninguna expresión regular marcada corresponde con una nueva línea |
Bueno, pues espero que eso les haya servido de algo, l.a información la obtuve del manual de programación de Unix, un saludo y gracias por su lectura