Estoy tratando de escribir una secuencia de comandos de shell bash (llamada por Automator Action) para cambiar el nombre de los programas de televisión en DVD que he llamado mal a lo largo de los años. Quiero eliminar parte del texto en los nombres de archivo. Quiero eliminar el texto que aparece después de una serie específica de caracteres que sé que siempre aparecerán en el nombre del archivo. Pero no sé cuántos caracteres aparecerán antes o después de la serie conocida de caracteres. Tampoco sé si el texto anterior o posterior contendrá múltiples puntos o guiones. Un ejemplo probablemente ayudaría:
The.Big.Bang.Theory.S01E01.xxxxxxxx.mp4
Sé que cada archivo siempre contendrá una cadena en el formato de SxxExx donde las x siempre son números. Pero no sé cuáles serán los números. Quiero obtener el nombre del archivo hasta e incluyendo la cadena SxxExx y la extensión del archivo, pero eliminar todo lo demás. Entonces, para el ejemplo anterior, terminaría con:
The.Big.Bang.Theory.S01E01.mp4
He intentado usar los comandos integrados de reemplazo de cadenas de bash. Pensé que el comando de índice expr me daría el punto de inicio entero de la cadena SxxExx y luego podría usar $ {filename: offset: length} para extraer solo la parte requerida del nombre de archivo (ya sé la extensión para que pueda ser re -adicional). Pero parece que la versión OS X de expr no incluye la funcionalidad de índice. Sólo he hecho scripts en Basic y LotusScript antes. En esos entornos, esto hubiera sido bastante fácil utilizando comandos como 'Me gusta' e 'Instr' o 'Mid'. Pero en el bash simplemente no puedo entenderlo. He pasado horas buscando en Google tratando de entender cómo usar expresiones regulares para ubicar la subcadena 'SxxExx' en el nombre del archivo, pero simplemente no puedo entenderlo. ¡Espero que algunos guionistas inteligentes de UNIX puedan ayudarme!