logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 02-03-2019 17:12:34

Anonyme
Invité

[Résolu]echo une phrase dans un texte

Bonjour,

pour générer un fichier m3u pour différents titres dans un dossier, je me suis apperçu qu'il en manquait certains titres dans l'importation de ce fichier par le player (dans le meilleur des cas)

certains morceaux comportaient des espaces doubles dans leur nom.

Mais un :


echo le premier  titre de ma compile >> 1.m3u
 



dans le m3u, une correction du double espace s'opère et me donne :


le premier titre de ma compile
 



Je suis donc obligé d'aller en amont dans mon fichier .toc pour chercher et corriger tout ces doubles espaces.

Vous avez une explication ?

Dernière modification par Anonyme (02-03-2019 17:56:34)

#2 02-03-2019 17:38:59

vv222
Administrateur
Lieu : Bretagne
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : [Résolu]echo une phrase dans un texte

Il faut que tu empêches Bash de jouer avec tes espaces, en utilisant des guillemets droits autour de la chaîne de caractères :

echo "le premier  titre de ma compile" >> 1.m3u


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#3 02-03-2019 17:53:48

Anonyme
Invité

Re : [Résolu]echo une phrase dans un texte

Bonjour vv222

effectivement, je viens de me rendre compte que j'avais :


  echo '#EXTM3U' > "$ALBUMNAME.m3u"
for file in *.flac; do
  echo '#EXTINF:0,'$file >> "$ALBUMNAME.m3u"
  echo $file >> "$ALBUMNAME.m3u"
done
 



j'ai donc modifié pour :


  echo '#EXTM3U' > "$ALBUMNAME.m3u"
for file in *.flac; do
  echo '#EXTINF:0,'"$file" >> "$ALBUMNAME.m3u"
  echo "$file" >> "$ALBUMNAME.m3u"
done
 



et tout roule.

mais rien ne m'empêche aussi de faire en amont sur mon fichier toc un :


sed -i -e 's/  / /g' "$ALBUMNAME.toc"
 



pour avoir un tag plus propre.

en tout cas merci.
je passe en résolu. smile

Dernière modification par Anonyme (02-03-2019 17:56:11)

#4 02-03-2019 18:59:17

MicP
Membre
Inscription : 29-02-2016

Re : [Résolu]echo une phrase dans un texte

Bonjour

Sans utiliser sed
bash sait remplacer des caractères.

Par exemple, en remplaçant une suite de deux caractères espace
par un seul caractère espace :

michel@debg53sw:~$ nomFich="le  premier  titre  de  ma  compile"
michel@debg53sw:~$ echo "${nomFich//  / }"
le premier titre de ma compile
michel@debg53sw:~$


Dernière modification par MicP (02-03-2019 19:02:56)

Hors ligne

#5 02-03-2019 19:22:16

Anonyme
Invité

Re : [Résolu]echo une phrase dans un texte

Bonsoir MicP

Donc j'ai ce fichier :


"$ALBUMNAME.toc"
 



je le présente comment ?

comme ça :

echo "${ALBUMNAME.toc//  / }"

Dernière modification par Anonyme (02-03-2019 19:27:43)

#6 02-03-2019 19:55:49

MicP
Membre
Inscription : 29-02-2016

Re : [Résolu]echo une phrase dans un texte

En lisant ce fil de discussion depuis le début
je ne sais pas d'où vient la variable ALBUMNAME
ni ce que contient le fichier ".toc"

=======
Alors, tout dépends de ce que tu fais de la variable ALBUMNAME avant et après l'extrait de script que tu as transmis,

mais par exemple,
en reprenant l'extrait de script que tu avais donné,
on pourrait faire le remplacement à chaque fois que la variable est utilisée,
ce qui fait que la valeur de la variable ne sera jamais modifiée :

echo '#EXTM3U' > "${ALBUMNAME//  / }.m3u"
for file in *.flac; do
  echo '#EXTINF:0,'"$file" >> "${ALBUMNAME//  / }.m3u"
  echo "$file" >> "${ALBUMNAME//  / }.m3u"
done
 



ou bien ne le faire qu'une seule fois au début
et pour toute la suite du script,
mais là, la valeur de la variable aura été modifiée.

ALBUMNAME="${ALBUMNAME//  / }"   # Recopier la variable dans elle même mais en remplaçant d'abord les suites de deux caractères espace par un seul caractère espace
# et continuer comme tu avais fait
 echo '#EXTM3U' > "$ALBUMNAME.m3u"
for file in *.flac; do
  echo '#EXTINF:0,'"$file" >> "$ALBUMNAME.m3u"
  echo "$file" >> "$ALBUMNAME.m3u"
done
 



=======
Ou alors, si j'ai mal compris,
c'est peut-être dans la variable file que tu voudrais remplacer les suites de deux caractères espace par un seul caractère espace
ce qui donnerait :

 echo '#EXTM3U' > "$ALBUMNAME.m3u"
for file in *.flac; do
  echo '#EXTINF:0,'"${file//  / }" >> "$ALBUMNAME.m3u"
  echo "${file//  / }" >> "$ALBUMNAME.m3u"
done



=======
=======
Mais si la commande sed fait ce que tu cherches à faire,
ne t'embête pas avec la méthode bash que je t'ai proposée
qui ne fait que remplacer dans une chaîne de caractère qui est assignée à une variable
une suite de deux caractères espaces par un seul caractère espace.

Dernière modification par MicP (02-03-2019 20:57:30)

Hors ligne

#7 02-03-2019 21:06:41

Anonyme
Invité

Re : [Résolu]echo une phrase dans un texte

MicP a écrit :


je suppose simplement que la liste des fichiers .flac
est une liste de fichiers dont les noms correspondent à un titre de morceau de musique.



Oui c'est ça.



cdrdao read-cd --read-raw --datafile "$ALBUMNAME.bin" --device $DEVICE --driver generic-mmc --paranoia-mode 3 --with-cddb "$ALBUMNAME.toc"
 



sur freedb, les infos ont parfois des fautes de frappes.

donc ma commande suivante, qui s'occupait de remplacer certains caractères non reconnu, j'ai aussi intégré 's/  / /g'


sed -i  -e 's/\\351/é/g' -e 's/\\350/è/g' -e 's/\\353/ë/g'  -e 's/\\352/ê/g' -e 's/\\340/à/g'  -e 's/\\342/â/g' -e 's/\\347/ç/g'  -e 's/\\356/î/g'  -e 's/\\364/ô/g' -e 's/\\373/û/g'  -e 's/\\371/ù/g' -e 's/\\366/ö/g' -e 's/\\344/ä/g' -e 's/\\264/´/g' -e 's/\\260/°/g' -e 's/\\357/ï/g'  -e 's/  / /g' "$ALBUMNAME.toc"
 



Pour qu'arriver à la séparation des morceaux sur le flac unique, je me retrouve bien avec des nommages sans doubles espaces.

Car à la génération du m3u, sans ça et sans  les " ", il perdait le lien de certain titres.

Voilà

Dernière modification par Anonyme (02-03-2019 21:14:49)

#8 02-03-2019 21:25:00

MicP
Membre
Inscription : 29-02-2016

Re : [Résolu]echo une phrase dans un texte

Merci beaucoup pour cette très claire explication smile

Effectivement, comme sed est déjà utilisé pour tous ces autres remplacements de caractères,
autant continuer à l'utiliser pour le remplacement des suites de deux caractères espace.

Hors ligne

#9 02-03-2019 21:44:16

Anonyme
Invité

Re : [Résolu]echo une phrase dans un texte

Pas de quoi smile

En tout cas, mon script fait ce que je lui demande :


└── [340M]  Haddaway - What Is Love
    ├── [ 69M]  FLACS
    │   ├── [ 34M]  01 - Haddaway - What Is Love.flac
    │   ├── [ 35M]  02 - Haddaway - Sing About Love.flac
    │   └── [ 170]  Haddaway - What Is Love.m3u
    ├── [ 92M]  Haddaway - What Is Love.bin
    ├── [ 375]  Haddaway - What Is Love.cue
    ├── [ 66M]  Haddaway - What Is Love.flac
    ├── [ 116]  Haddaway - What Is Love.tags
    ├── [ 638]  Haddaway - What Is Love.toc
    ├── [ 21M]  MP3S
    │   ├── [ 10M]  01 - Haddaway - What Is Love.mp3
    │   ├── [ 11M]  02 - Haddaway - Sing About Love.mp3
    │   └── [ 166]  Haddaway - What Is Love.m3u
    └── [ 92M]  WRITE_AUDIOCD
        ├── [ 147]  BURN.txt
        ├── [ 92M]  Haddaway - What Is Love.bin
        └── [ 638]  Haddaway - What Is Love.toc

 

Dernière modification par Anonyme (02-03-2019 21:46:36)

Pied de page des forums