%20con%20una%20expresi%C3%B3n%20regular%20de%20Unix%2FLinux.png)
tengo un par de archivos con el nombre
(a).1
(a).2
...
(a).100
Dado que a muchas herramientas de procesamiento no les gustan mucho (
y )
en el nombre del archivo, pensé que sería mejor cambiarles el nombre a un nombre diferente. Busqué en Google para cambiar el nombre de los archivos y encontré la maravillosa herramienta rename
donde puedo introducir una expresión regular. Bien, probemos esto:
$ rename -v s/\(a\)/b/ \(a\).*
(a).1 renamed as (b).1
(a).2 renamed as (b).2
(a).3 renamed as (b).3
Mmm no es lo que esperaba. Después de buscar un poco en Google descubrí que \(
\)
es unoperador de agrupación. Lo cual tiene sentido ya que no escapé del (
)
comando.
Resolví mi problema de cambio de nombre usando el .
carácter que coincide con todo tipo de valores:
rename -v s/.b./b/ \(b\).*
Esta solución no es realmente agradable. Entonces, ¿cómo puedo hacer coincidir (
y )
en Bash/Linux/Unix Regex?
Respuesta1
Esto es lo que necesitas:
find -name "(*)*" -type f | rename 's/\(|\)//g'
Primero busca archivos en el directorio actual que coincidan con el nombre descrito y luego les cambia el nombre quitando los corchetes. Puede ver que los caracteres coincidentes (y) se reemplazan por nada.