
Tengo un montón de archivos de texto que terminan con la línea www.thethinkfoundation.org
, por ejemplo:
file1.www.thethinkfoundation.org.txt
file2.www.thethinkfoundation.org.txt
.
.
.
file100.www.thethinkfoundation.org.txt
Deseo eliminar/eliminarwww.thethinkfoundation.org
Probé el siguiente comando en una terminal para lograrlo:
for f in www.thethinkfoundation.org*; do mv "$f" "${f#thethinkfoundation.org}"; done
El resultado fue:
file1..txt
file2..txt
.
.
.
file100..txt
Gracias de antemano por una solución que funcione.
PD: no deseo utilizar el rename
comando. De hecho, estoy buscando uno que funcione en distribuciones Linux y *BSD. Mi editor de texto preferido es nano
.
Respuesta1
Reemplazo de subcadena basado enExpansión de parámetros de Shellin bash
y algunos otros shells también se pueden lograr de dos maneras:
Primero, puedes reemplazarsolo la primera ocurrencia(de izquierda a derecha) de un patrón como este:
${var/pattern/replacement}
Segundo, puedes reemplazartodas las ocurrenciasde un patrón como este:
${var//pattern/replacement}
¿Dónde var
está la variable/parámetro que contiene la cadena y pattern
es el patrón que desea buscar y reemplazar en esa cadena y replacement
es el reemplazo que desea sustituir pattern
con el que también se puede dejar vacío, es decir, ${var//pattern/}
si desea simplemente eliminar ese patrón? de la cuerda.
Por lo tanto, la solución deseada se vería así:
for f in *www.thethinkfoundation.org*; do
echo mv -n -- "$f" "${f//www.thethinkfoundation.org./}"
done
Agregué echo
un ensayo para que puedas probarlo primero y luego sacarlo echo
y ejecutarlo nuevamente para hacer el trabajo real.