Linux/Unix Shell Scripting - expresion regular

   
Vista:

expresion regular

Publicado por agustin (2 intervenciones) el 12/09/2008 20:57:00
quiero comprobar si un parametro $1 termina por ej en .tar.gz, el problema es que no se si se puede aplicar una expresion regular a una sola palabra.
la expresion seria .tar.gz$
si se puede como se hace y si no como lo puedo hace de otra forma?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:expresion regular

Publicado por Tom (253 intervenciones) el 15/09/2008 09:11:16
Échale un vistazo al man de expr, a ver si te vale.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:expresion regular

Publicado por xae (9 intervenciones) el 15/09/2008 23:20:59
Puedes probar lo siguiente,


match=${1##*.tar.gz}
echo "match: "$match
[ -z $match ] && echo "Contiene" || echo "No contiene"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:expresion regular

Publicado por xae (9 intervenciones) el 15/09/2008 23:32:38
Puedes probar lo siguiente,

match=${1##*.tar.gz}
[ -z "$match" ] && echo "Acaba en .tar.gz" || echo "No acaba en .tar.gz"

${1##*.tar.gz} realiza 'parameter expansion', eliminando de $1 la cadena de mayor longitud que encaja con el patrón suministrado, '.tar.gz'; en este caso es la cadena completa, de forma que si $1 termina en el patrón indicado la variable expandida será la cadena nula.

[ -z "$match" ] comprueba si el resultado es la cadena nula.

En versiones posteriores a la 3 de bash se puede utilizar el operador =~, que permite verificar si una variable verifica una expresión regular...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:expresion regular

Publicado por agustin (2 intervenciones) el 16/09/2008 05:35:05
gracias por responder, eso funciono.
Pero no se que significan ciertas cosas los parentisis {} yo los conozco nomas asi por ej [a-z]{3} osea 3 letras, y los # ni idea que son.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:expresion regular

Publicado por xae (9 intervenciones) el 16/09/2008 20:36:17
La shell Bash es capaz de realizar lo que se denomina 'parameter expansion/substitution', la sintaxis empleada es ${var}, donde var es una variable shell.

Seguramente lo habrás usado cuando por el contexto te has visto obligado ha escribir ${var} en lugar de $var para acceder al valor de var.

Bash dispone de un buen número de funciones para el manejo de cadenas repartidas entre la utilidad expr y el 'parameter expansion', la función que he utilizado elimina de una cadena la subcadena de
mayor longitud que valida el patrón suministrado desde el comienzo de la cadena,

${1##*.tar.gz}, decuelve el resultado de eliminar de $1 la cadena más larga buscando desde el primer carácter de $1 que satisface el patrón *.tar.gz

Ejemplo,

"fichero.tar.gz", devolverá null, la cadena vacía, ya que toda ella satisface el patrón.
"fichero.tar.gz.txt", devolverá ".txt", la parte de la cadena tras el patrón.

Para obtener más información sobre este tema 'man bash' o 'info bash', el documento es bastante largo pero merece la pena leerlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar