[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: una de expresiones regulares



On Fri, Apr 11, 2014 at 01:23:34PM +0200, Mariano Cediel wrote:
> echo "create_dscomer9__agifa090.sql" | grep  -e 'dsc*agi'
> esto NO funciona, no devuelve NADA.
> 
> ¿cómo se pone para poder "machear" la linea que contenga <dsc> y
> ademas que contenga <agi>, haya lo que haya en medio?
> 
> Un saludo y gracias
Ya varios comentaron la respuesta correcta, que es usar la expresión
regular 'dsc.*agi', que significa 'dsg' seguido de cero o más
caracteres cualquiera, seguido de 'agi'. '.*' (el punto significa
cualquier caracter, el asterisco, que son cero o más ocurrencias).


Yo lo que quería aportar es que en ocasiones es muy pesado usar un
grep solo para verificar que un nombre de archivo sigue cierto
patrón, porque el shell ya tiene mecanismos para lograrlo. Si usas
bash:

  archivo="create_dscomer9__agifa090.sql"
  if [[ $archivo = *dsc*agi* ]]; then
    echo verificado
  else
    echo 'no concuerda'
  fi

En este caso, bash (no dash) tiene el comando [[ ... ]], que te
permite usar globs en el lado derecho del igual. Un glob es como un
tipo de expresión regular, pero más simple (y menos poderoso).


También puedes usar case, que funciona también en dash:

  archivo="create_dscomer9__agifa090.sql"
  case $archivo in
    *dsc*agi*)
      echo verificado
      ;;
    *)
      echo 'no concuerda'
  esac

-- 
Eduardo Bustamante


Reply to: