Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/08/2010, à 04:35

Hizoka

[resolu] simplifaction avec un contraire de case

Bonsoir,

je cherche un moyen de simplifier ça :

# Si aucun audio n'est selectionné, on les degage
if [[ -z $(grep " -a " "${mkvmerge}") ]]
then
    echo -n " -A" >> "${mkvmerge}"
fi

# Si aucune video n'est selectionnée, on les degage
if [[ -z $(grep " -d " "${mkvmerge}") ]]
then
    echo -n " -D" >> "${mkvmerge}"
fi

# Si aucun sous-titre n'est selectionné, on les degage
if [[ -z $(grep " -s " "${mkvmerge}") ]]
then
    echo -n " -S" >> "${mkvmerge}"
fi

j'avais pensé à case, mais :

for option in ${mkvmerge}
do
    case ${option} in
        # Si aucun audio n'est selectionné, on les degage
        "-a") echo -n " -A" >> "${mkvmerge}" ;;

        # Si aucune video n'est selectionnée, on les degage
        "-d") echo -n " -D" >> "${mkvmerge}" ;;

        # Si aucun sous-titre n'est selectionné, on les degage
        "-s") echo -n " -S" >> "${mkvmerge}" ;;

        # Si aucun fichier joint n'est selectionné, on les degage
        "-m") echo -n " -M" >> "${mkvmerge}" ;;
    esac
done

fais le contraire de ce que je veux.

Il y aurait la boucle :

for option in -a -d -s
do
    [[ -z $(grep " ${option} " "${mkvmerge}") ]] && echo -n " ${option^^}" >> "${mkvmerge}"
done

qui devrait fonctionner, mais y a-t-il plus simple ?

merci smile

Dernière modification par Hizoka (Le 18/12/2011, à 01:36)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 14/08/2010, à 04:39

sputnick

Re : [resolu] simplifaction avec un contraire de case

Je ne sait pas ce que vaut ${mkvmerge} mais j'ai l'impression que tu cherche à parser des arguments ; regarde du coté de getopts :

help getopts

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 14/08/2010, à 04:43

Hizoka

Re : [resolu] simplifaction avec un contraire de case

non ce n'est pas pour des options mais pour créer un code à exécuter.

exemple de valeur pour mkvmerge :

mkvmerge -o "/home/hizoka/fichier.mkv" -d 1 -a 2 -S --no-chapters --no-global-tags -M "/home/hizoka/fichier_base.mkv" "/home/hizoka/audio.ac3"

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 14/08/2010, à 13:16

Totor

Re : [resolu] simplifaction avec un contraire de case

Salut,
Pour éviter le boucle (Je ne sais pas si c'est une simplification mais bon) :

# suppression des options -A, -V et -S de la ligne de commande
printf "%s\n" -A -V -S|xargs -I{} sed -i '1 s/ {}//' "${mkvmerge}"

# ajout des options ( la suppression d'avant permet d'éviter les doublons)
sed -i '1 s/\(.*\)/\1 -A -V -S /' "${mkvmerge}"

# suppression des options -A, -V et -S si -a, -v et -s existent
printf "%s\n" -a -v -s|xargs -I{} grep -o -- {} "${mkvmerge}"|tr '[[:lower:]]' '[[:upper:]]'|xargs -I{} sed -i 's/ {} / /g' "${mkvmerge}"

en terme de compréhension, ce n'est pas le cas !
EDIT : la 1ère ligne peut être inutile si la redondance ne pose pas de problème

sinon, je pense que le mieux est  :

( for option in -a -d -s
do
    grep -q -- " ${option} " "${mkvmerge}" || echo -n " ${option^^}" 
done
) >> "${mkvmerge}"

Dernière modification par Totor (Le 14/08/2010, à 13:22)


-- Lucid Lynx --

Hors ligne

#5 Le 14/08/2010, à 14:35

Hizoka

Re : [resolu] simplifaction avec un contraire de case

merci, en effet la 2e soluce est légèrement plus compréhensible...

finalement j’étais pas trop mal smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#6 Le 16/08/2010, à 08:11

credenhill

Re : [resolu] simplifaction avec un contraire de case

hello
avec sed :

sed -i '/ -a/! s/$/ -A/;/ -d/! s/$/ -D/;/ -s/! s/$/ -S/' "${mkvmerge}"

Hors ligne

#7 Le 16/08/2010, à 17:26

Hizoka

Re : [resolu] simplifaction avec un contraire de case

en effet, et c'est plus rapide qu'avec une boucle smile

merci.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne