Debian-facile

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

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

#1 05-01-2017 04:35:46

golgot200
Membre
Inscription : 05-08-2007

[Résolu]mettre un tiret devant chaque suite de nombres avec SED

Bonjour,


echo me donne ça :

120 130 140 150




je voudrais obtenir en ajoutant un tiret ça:

-120 -130 -140 -150



echo $1 | sed -e 's *******'



Une idée ?

Dernière modification par golgot200 (05-01-2017 06:23:13)

Hors ligne

#2 05-01-2017 06:22:39

golgot200
Membre
Inscription : 05-08-2007

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

En fait c'était tout bête, je n'arrivais pas à mettre un tiret devant le premier nombre. Je m'obstinais avec un seul sed. j'ai rajouté un seb avec le ^ smile

sed -e  's/ / -map i:/g' -e  's/^/ -map i:/g'

Hors ligne

#3 05-01-2017 16:53:35

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Bonjour

Rien qu'en utilisant l'interpréteur bash (donc sans avoir à utiliser sed), il y avait la possibilité d'utiliser une boucle for :

mesVals="120 130 140 150"


varTemp=""; for valeur in $mesVals; do varTemp="${varTemp} -${valeur}"; done; mesVals=${varTemp/ /};


echo $mesVals


-120 -130 -140 -150

Dernière modification par MicP (05-01-2017 20:59:48)

Hors ligne

#4 05-01-2017 18:58:58

golgot200
Membre
Inscription : 05-08-2007

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Bonsoir MicP

Merci smile

"-120 -130 -140 -150"



Je ne veux pas les guillemets tongue

Tu peux me faire ça :

-map i:120 -map i:130 -map i:140 -map i:150



Car moi je n'arrive qu'a sortir ça :

"-map i:131 -map i:132 -map i:133"

Dernière modification par golgot200 (05-01-2017 19:03:49)

Hors ligne

#5 05-01-2017 20:55:42

MicP
Membre
Distrib. : debian stable
Noyau : Linux 3.16.0-4-amd64
(G)UI : Xfce
Inscription : 29-02-2016

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Je ne veux pas les guillemets

Il n'y a pas de guillemets dans la variable résultante (mesVals)

Je n'ai mis les guillemets dans le "echo" final que pour démontrer qu'il n'y avait pas de caractère espace en trop :

Par contre, sans les guillemets, tu n'aurais pas pu voir qu'il y avait un espace en trop que je supprime avec :

mesVals=${varTemp/ /};



=======
Si ton but est de l'afficher sans les guillemets, tu peux donc remplacer

echo \"${mesVals}\"


par

echo $mesVals



=======
Je modifie mon précédent message pour un affichage sans les guillemets.

Dernière modification par MicP (05-01-2017 21:04:13)

Hors ligne

#6 05-01-2017 21:58:46

golgot200
Membre
Inscription : 05-08-2007

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Ok smile merci.

Donc :

AUDIO=$(mplayer -vo null -ao null -frames 0 -identify dvd://01 -dvd-device /dev/sr0  2>/dev/null | grep "language: fr" | grep "audio" | grep "ac3 (5.1)\|ac3 (stereo)" | awk -F " " '{print $NF}' | awk -F "." '{print $1}')



mesVals=$AUDIO



varTemp=""; for valeur in $mesVals; do varTemp="${varTemp} -map i:${valeur}"; done; mesVals=${varTemp/ /};



echo $mesVals




Me donne bien :

-map i:131 -map i:132 -map i:133




Un truc me chagrine mais c'est pas obligé que j'ai raison, lorsque je vais intégrer $mesVals dans ffmpeg, j'ai peur que le premier moins de "-map..." n'ai pas d'espace avec $TITLE

en gros, ça ferait un truc du genre :

ffmpeg -i "$TOTAL_FILES.dump" -ss 00 -t 120  -map 0:v  -metadata title="$TITLE" $mesVals -threads 0 -profile:v high -level 4.1 -crf 17 -vb 4M -minrate 4M -maxrate 4M -bufsize 7M -pix_fmt yuv420p -sws_flags lanczos -vf w3fdif,hqdn3d=1.5:1.5:6:6,unsharp=5:5:1.0:5:5:0.0,hue=b=0.1:s=0.7,noise=c0s=10:c1s=0:c2s=0:c0f=a+t   -trellis 2 -x264opts bframes=6:cabac=1 -movflags faststart -c:a ac3 -y "$OUTPUT"/"$TOTAL_FILES-$TITLE.mp4"



ffmpeg -i "$TOTAL_FILES.dump" -ss 00 -t 120  -map 0:v  -metadata LE_TITRE_DU_FILM-map i:129 -map i:130 -map i:131 -threads 0 -profile:v high -level 4.1 -crf 17 -vb 4M -minrate 4M -maxrate 4M -bufsize 7M -pix_fmt yuv420p -sws_flags lanczos -vf w3fdif,hqdn3d=1.5:1.5:6:6,unsharp=5:5:1.0:5:5:0.0,hue=b=0.1:s=0.7,noise=c0s=10:c1s=0:c2s=0:c0f=a+t   -trellis 2 -x264opts bframes=6:cabac=1 -movflags faststart -c:a ac3 -y "$OUTPUT"/"$TOTAL_FILES-$TITLE.mp4"



Je dis ça car j'ai remarqué que ça foirait si je m'étais $mesVals entre guillemets "$mesVals" smile

Mais bon, c'est peut-être pas le cas avec ton code que je vais tester de suite ...

Hors ligne

#7 05-01-2017 22:06:50

golgot200
Membre
Inscription : 05-08-2007

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Apparement tout fonctionne wink
Mais c'est marrant qu'on ne puisse pas mettre "$mesVals". si on met les guillemets, le script perd le map hmm

Hors ligne

#8 05-01-2017 22:09:05

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.15
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Pour rajouter des tirets devant des nombres avec sed, je m'y prendrai comme cela :


sed -E 's/([[:digit:]]+)/-\1/g'
 



Et voilà le boulot wink

EDIT: le -E permet d'avoir des expressions rationnelles un peu plus simple :
il y a moins besoin d'antislash smile

Dernière modification par enicar (05-01-2017 22:12:57)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#9 05-01-2017 22:16:08

golgot200
Membre
Inscription : 05-08-2007

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

J'ai la tête qu'explose. Je teste big_smile

Hors ligne

#10 05-01-2017 22:20:06

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.15
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Ça marche :


 echo 120 130 140 150 |sed -E 's/([[:digit:]]+)/-\1/g'
 


Retourne


-120 -130 -140 -150
 


Mais je sais pas si c'est exactement ce que tu as besoin, j'ai juste répondu au topic du fil wink


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#11 05-01-2017 22:21:37

golgot200
Membre
Inscription : 05-08-2007

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Oui ça marche big_smile wink

MAP=$(echo $i | sed -E 's/([[:digit:]]+)/-map i:\1/g')
echo $MAP
-map i:131 -map i:132 -map i:133
 



Merci beaucoup smile

EDIT tu as vu mon post 7 ?

Dernière modification par golgot200 (05-01-2017 22:23:05)

Hors ligne

#12 05-01-2017 22:23:53

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.15
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

golgot200 a écrit :

Merci beaucoup smile


Je t'en prie, c'est toujours un plaisir smile


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#13 05-01-2017 22:24:48

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.15
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

golgot200 a écrit :

EDIT tu as vu mon post 7 ?


Oui, et puis… que veux-tu dire ?


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#14 05-01-2017 22:26:00

golgot200
Membre
Inscription : 05-08-2007

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Unable to find a suitable output format for ''
: Invalid argument



Tu vois si je met des guillemets à "$MAP" , c'est bizarre ce truc big_smile

Hors ligne

#15 05-01-2017 22:27:50

golgot200
Membre
Inscription : 05-08-2007

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Sans c'est nickel tout roule mais c'est simplement pour comprendre le pourquoi du comment wink

EDIT:

ffmpeg -i "$TOTAL_FILES.dump" -ss 00 -t 120  -map 0:v  -metadata title="$TITLE" "$MAP" -threads 0 -profile:v high -level 4.1 -crf 17 -vb 4M -minrate 4M -maxrate 4M -bufsize 7M -pix_fmt yuv420p -sws_flags lanczos -vf w3fdif,hqdn3d=1.5:1.5:6:6,unsharp=5:5:1.0:5:5:0.0,hue=b=0.1:s=0.7,noise=c0s=10:c1s=0:c2s=0:c0f=a+t   -trellis 2 -x264opts bframes=6:cabac=1 -movflags faststart -c:a ac3 -y "$OUTPUT"/"$TOTAL_FILES-$TITLE.mp4"

Dernière modification par golgot200 (05-01-2017 22:30:36)

Hors ligne

#16 05-01-2017 22:32:45

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.15
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

golgot200 a écrit :

Tu vois si je met des guillemets à "$MAP" , c'est bizarre ce truc big_smile


Non, ce n'est pas bizarre, car lorsque tu mets des guillemets "$MAP" est transmis comme
un seul argument, c'est une chaine indivisible passée comme telle à ffmpeg. Or ce qu'attend
ffmpeg ce sont des options délimités avec leur argument , et non une option qui serait  :
« -map i:131 -map i:132 -map i:133 ».

EDIT: Et sans les guillemets, bash « expanse » la variable et découpe en « mot ».
C'est pour éviter ce découpage en « mot » que l'on se sert des guillemets.

Dernière modification par enicar (05-01-2017 22:35:03)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#17 05-01-2017 22:36:52

golgot200
Membre
Inscription : 05-08-2007

Re : [Résolu]mettre un tiret devant chaque suite de nombres avec SED

Et ben merci pour cette explication.

J'ai pouvoir continuer ici :

https://debian-facile.org/viewtopic.php?id=16404

smile

Hors ligne

Pied de page des forums