Grep con variables de C.

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
AbelBs
Forista Nuevo
Forista Nuevo
Mensajes: 2
Registrado: Jue Ene 14, 2010 7:23 pm

Grep con variables de C.

Mensaje por AbelBs » Jue Ene 14, 2010 7:26 pm

Buenas tardes,

Tengo un problema que no sé cómo solucionar, necesito hacer un grep -v pero, que los patrones de búsqueda sean variables definidas anteriormente en C.

Por ejemplo:

char var1="h";
char var2="o";
char var3="d";
system("grep -v \"var1 var2 var3\" fichero.txt");
----
----
----
Lo he puesto así, pero no va ¿Podrías echarme una mano?

Gracias de antemano.
Avatar de Usuario
shakka
Forista Mayor
Forista Mayor
Mensajes: 753
Registrado: Dom Sep 18, 2005 7:00 am
Contactar:

Re: Grep con variables de C.

Mensaje por shakka » Jue Ene 14, 2010 7:48 pm

Concatenalo con strcat, se encuentra en string.h

Editado -- Vie Ene 15, 2010 3:48 am --

Tambien puedes usar sprintf para armar la cadena
blog http://blog.mbrenes.com
AbelBs
Forista Nuevo
Forista Nuevo
Mensajes: 2
Registrado: Jue Ene 14, 2010 7:23 pm

Re: Grep con variables de C.

Mensaje por AbelBs » Jue Ene 14, 2010 8:02 pm

shakka escribió:Concatenalo con strcat, se encuentra en string.h

Editado -- Vie Ene 15, 2010 3:48 am --

Tambien puedes usar sprintf para armar la cadena
Sí, pero el problema que tengo es al hacer referencia a las variables desde el grep.
Avatar de Usuario
shakka
Forista Mayor
Forista Mayor
Mensajes: 753
Registrado: Dom Sep 18, 2005 7:00 am
Contactar:

Re: Grep con variables de C.

Mensaje por shakka » Jue Ene 14, 2010 9:47 pm

Lo que veo es que estas inicializando mal las variables. Deberias usar comillas simples

Código: Seleccionar todo

char var1="h";
en su lugar

Código: Seleccionar todo

char var1='h';
blog http://blog.mbrenes.com
fpuga
Forista Mayor
Forista Mayor
Mensajes: 798
Registrado: Sab Ago 25, 2007 7:00 am
Ubicación: Galicia - España
Contactar:

Re: Grep con variables de C.

Mensaje por fpuga » Vie Ene 15, 2010 11:07 pm

Creo que lo que dice shakka del strcat es algo así

var1="h"
var2="o"
strcat(var_result,"grep -v ",var1,var2,"fichero.txt")
system(var_result)

Mira tu como es la sintaxis correcta, esto va en pseudo-codigo :)
Mi blog: [url=http://conocimientoabierto.es]Conocimiento Abierto[/url]
Avatar de Usuario
shakka
Forista Mayor
Forista Mayor
Mensajes: 753
Registrado: Dom Sep 18, 2005 7:00 am
Contactar:

Re: Grep con variables de C.

Mensaje por shakka » Vie Ene 15, 2010 11:59 pm

No se cual es el problema que el tiene o a que se refiere en que : no va, si no le compila o hace algo diferente a lo que espera y que es lo que espera.

Por otro lado recomendaria sprintf antes que cat, en cuanto a escalabilidad y menos codigo, p.e, este lo uso para armar sntencias SQL o linea de comandos como este caso.
blog http://blog.mbrenes.com
Avatar de Usuario
ORBVS
Forista Nuevo
Forista Nuevo
Mensajes: 28
Registrado: Lun Nov 14, 2005 8:00 am
Contactar:

Re: Grep con variables de C.

Mensaje por ORBVS » Jue Feb 04, 2010 6:30 pm

Pues aqui te va un programita chiquitito para que empiezes.
El mismo programa en C++ fuera mas simple y mucho mas pequeno y con menos probabilidad de errores.
El caso es que strcat acepta dos parametros, el primero es el resultado, el esgundo es lo que vas a concatenar.
Como UNIX usa espacios para separar los parametros de sus comando es necesario insertarlos donde se debe, sino el comando se veria como: "grep-vhobfichero.txt" y eso causaria un error ya que le fichero grep-vhobfichero.txt probablemente no existe.

Saludos!

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  /* necesitas asegurar que comando tenga suficientes caracteres para que quepa todo el comando con las variables */
  char comando[128] = "grep -v";
  char *fichero = "fichero.txt";
  char *espacio = " ";
  /**/
  char *var1 = "h", *var2 = "o", *var3 = "b";

  strcat(comando, espacio); /* "grep -v" + " " */
  strcat(comando, var1);    /* "grep -v " + "h" */
  strcat(comando, var2);    /* "grep -v h" + "o" */
  strcat(comando, var3);    /* "grep -v ho" + "b" */
  strcat(comando, espacio); /* "grep -v hob" + " " */
  strcat(comando, fichero); /* "grep -v hob " + "fichero.txt" */

  /* "grep -v hob fichero.txt" */
  /* si quieres cada "var" por separado entonces agrega entre cada uno un espacio
     con "strcat(comando, espacio);" */
  
  
  system(comando);

  return 0;
}
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje