2 votos

Reemplazar una cadena en el nombre del directorio usando una variable

tengo un script para hacer un nuevo subdirectorio de la carpeta a partir de una variable con el nombre de otro directorio que va como esto:

str="/home/folder/test"
base="$(basename $str)"

mkdir -p "/home/folder2/${base}"

Lo que estoy tratando de hacer ahora es buscar y reemplazar una cadena en esta varible cuando se hace la nueva carpeta.

Ejemplo, yo tengo:

/Home/Album-Artist[FLAC] 

asignado a la variable. Cuando uso el comando mkdir para hacer el nuevo directorio, quiero buscar y reemplazar "FLAC" con "V0" en la nueva carpeta será

/Home/Album-Artist[V0]

4voto

user91500 Puntos 6355

Solución

Reemplace la línea:

base="$(basename $str)"

con:

base="$(basename $str | sed 's/FLAC/V0/')"

o, si desea que el [ y ] soportes para convertirse en parte del patrón de búsqueda:

base="$(basename $str | sed 's/\[FLAC\]/[V0]/')"

Explicación

  • El | (o tubo) de carácter esencialmente significa "tomar el resultado y avance en el siguiente programa".

  • El sed (stream editor) comando toma la entrada, se aplica comandos, e imprime el resultado. Por ejemplo, el s/FLAC/V0/ comando sed significa "para cada línea de entrada, la búsqueda de la FLAC y reemplazarlo con V0 (pero no más de una vez)".

  • sed utiliza expresiones regulares en lugar de fija patrones de búsqueda. Eso significa que usted necesita para escapar de ciertos personajes; por lo tanto, mi último ejemplo se dice \[ y \] en el patrón de búsqueda (en lugar de sólo [ y ]).

2voto

Oskar Puntos 1242

En bash sí podría llamar sed, perl, python, swift o en otros idiomas.

Si usted está buscando para subir de nivel en bash, trate de:

${var%pattern}

El % tiras de un patrón de la parte de atrás de la variable en una línea que usted podría srip el final y tachuela en el nuevo.

new=${base%\[FLAC\]}"[V0]" ## [FLAC] to [V0] with \ to escape []  

Más claro es el de la búsqueda y reemplazar la funcionalidad suponiendo que ningún artista o álbum sería FLAC y conseguir la igualada. El final de la cola de búsqueda por encima de ayuda para ese caso extremo, pero es más difícil leer la intención.

new=${base/FLAC/V0}

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X