2 votes

Remplacer une chaîne de caractères dans le nom du répertoire en utilisant une variable

J'ai un script mis en place pour faire un nouveau directoy dans le dossier basé sur une variable nommée pour un autre répertoire qui va comme ceci :

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

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

Ce que j'essaie de faire maintenant, c'est de trouver et de remplacer une chaîne dans cette variable lorsqu'elle crée le nouveau dossier.

Exemple, j'ai :

/Home/Album-Artist[FLAC] 

assigné à la variable. Quand j'utilise mkdir pour créer le nouveau répertoire, je veux trouver et remplacer "FLAC" par "V0", donc dans le nouveau dossier ce sera

/Home/Album-Artist[V0]

4voto

Synoli Points 1131

Solution

Remplacez votre ligne :

base="$(basename $str)"

avec :

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

ou, si vous voulez le [ y ] pour faire partie du modèle de recherche :

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

Explication

  • El | (ou tuyau ) signifie essentiellement "prendre le résultat et l'introduire dans le programme suivant".

  • El sed (éditeur de flux) prend l'entrée, lui applique des commandes, et imprime le résultat. Par exemple, la commande s/FLAC/V0/ dans sed signifie "pour chaque ligne d'entrée, rechercher FLAC et le remplacer par V0 (mais pas plus d'une fois)".

  • utilisation de sed expressions régulières au lieu de modèles de recherche fixes. Cela signifie que vous devez échapper certains caractères ; ainsi, mon dernier exemple dit \[ y \] dans le modèle de recherche (au lieu de simplement [ y ] ).

2voto

Oskar Points 1242

En bash lui-même, vous pourriez appeler sed, perl, Python, swift ou d'autres langages.

Si vous cherchez à vous perfectionner en bash, essayez :

${var%pattern}

Le % retire un motif de l'arrière de la variable, de sorte qu'en une ligne, vous pouvez retirer la fin et ajouter la nouvelle.

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

La fonctionnalité de recherche et de remplacement est plus claire, car elle part du principe qu'aucun artiste ou album ne sera jamais en FLAC et ne correspondra. La recherche en bout de ligne ci-dessus est utile pour ce cas limite, mais il est plus difficile de lire l'intention.

new=${base/FLAC/V0}

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X