Récupérer du texte dans un fichier pour y mettre en variable
Résolu
xunil2003
Messages postés
765
Date d'inscription
Statut
Membre
Dernière intervention
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je voudrais récupérer du texte dans un fichier afin de le mettre en variable.
Dans le fichier j'ai cette ligne
il faut que je récupéré :
1/ France 5 (comment récupérer le texte en début de la ligne jusqu'à "( " ) le nom de la chaîne.
2/ 490000000 (comment récupérer le texte de ":" jusqu'à ":") La fréquence.
3/ 8 (comment récupérer le texte de "BANDWIDTH_" à "_MHZ") le numéro de bandwidth.
4/ 260 (comment récupérer le texte de ":" jusqu'à la fin de la ligne.) le numéro de programme.
Dans ce fichier j''ai plusieurs lignes identique a récupérer
Exemple :
Pour recréer le fichier autrement via un script.
seulement je ne comprend pas comment y faire avec sed ????
J'ai essayé comme ceci avec sed pour récupérer le nom de la chaine TV mais je n'y arrive pas
Comment puis je faire ?
Merci.
Je voudrais récupérer du texte dans un fichier afin de le mettre en variable.
Dans le fichier j'ai cette ligne
France 5(GR1 A):490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:320:330:260
il faut que je récupéré :
1/ France 5 (comment récupérer le texte en début de la ligne jusqu'à "( " ) le nom de la chaîne.
2/ 490000000 (comment récupérer le texte de ":" jusqu'à ":") La fréquence.
3/ 8 (comment récupérer le texte de "BANDWIDTH_" à "_MHZ") le numéro de bandwidth.
4/ 260 (comment récupérer le texte de ":" jusqu'à la fin de la ligne.) le numéro de programme.
Dans ce fichier j''ai plusieurs lignes identique a récupérer
Exemple :
France Ô(GR1 A):490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:520:530:261 ARTE HD(Multi 4):506000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:720:730:1031 ARTE(SMR6):514000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:720:730:1543 M6(MULTI4):506000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:120:130:1025 W9(MULTI4):506000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:220:230:1026 NT1(MULTI4):506000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:320:330:1027 NRJ12(SMR6):514000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:220:230:1538 TMC(SMR6):514000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:620:630:1542 HD1(MHD7):538000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:120:130:2561 L'Equipe 21(MHD7):538000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_AUTO:220:230:2562
Pour recréer le fichier autrement via un script.
seulement je ne comprend pas comment y faire avec sed ????
J'ai essayé comme ceci avec sed pour récupérer le nom de la chaine TV mais je n'y arrive pas
NOMCHAINETV=$(echo "$fichier" | sed 's/\:.*$//')
Comment puis je faire ?
Merci.
A voir également:
- Récupérer du texte dans un fichier pour y mettre en variable
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
5 réponses
hello
une variable pour tout ?
une variable pour tout ?
$ CHAINES=$(awk -F"[(:_]" '{print $1, $3, $7, $NF}' fichier) $ echo "$CHAINES" France 5 490000000 8 260 France Ô 490000000 8 261 ARTE HD 506000000 8 1031 ARTE 514000000 8 1543 M6 506000000 8 1025 W9 506000000 8 1026 NT1 506000000 8 1027 NRJ12 514000000 8 1538 TMC 514000000 8 1542 HD1 538000000 8 2561 L'Equipe 21 538000000 8 2562 $
Bonjour,
Merci pour votre réponse.
Mais votre solution ne peut pas aller dans mon script.
Vu que je dois écrire un nouveau fichier pour la conversion.
C'est pour cela que je dois récupérer le le contenu dans une variable pour chacun des textes à récupérer afin de les écrire dans un nouveau fichier.
Mon script
Merci pour votre réponse.
Mais votre solution ne peut pas aller dans mon script.
Vu que je dois écrire un nouveau fichier pour la conversion.
C'est pour cela que je dois récupérer le le contenu dans une variable pour chacun des textes à récupérer afin de les écrire dans un nouveau fichier.
Mon script
#!/bin/bash echo "" echo "+------------------------------------------------------+" echo "| Conversion du fichier channels.conf en m3u de w_scan |" echo "+------------------------------------------------------+" echo "" read -p "Veuillez indiquer l'adaptateur a utiliser" echo " Par default : 0 = pour l'adapter0" read -p "Appuyer sur une touche pour continuer ..." ADAPTATEUR PLAYLIST=$2 SOURCEFICHIER=$1 echo "#EXTM3U" > $PLAYLIST echo "Veuillez patienter pendant que le fichier $SOURCEFICHIER est analysé" cat $SOURCEFICHIER | while read FICHIER # Analyser le nom du canal, la fréquence, le BANDWIDTH et le numéro du programme do CHAINENOM=$(echo "$FICHIER" | sed 's/\:.*$//') CHAINEFREQ=$(echo $FICHIER | sed 's/\:/+/1' | sed 's/.*+//' | sed 's/\:.*//' | sed 's/$/000/') CHAINEBANDWIDTH=$(echo $FICHIER | sed '??????????????') CHAINEPROGRAMME=$(echo "$FICHIER" | sed '???????') # les informations à écrire dans le nouveau fichier converties en m3u echo "#EXTM3U" >> $PLAYLIST echo "#EXTINF:0,$CHAINENOM" >> $PLAYLIST echo "#EXTVLCOPT:dvb-adapter=$ADAPTATEUR" >> $PLAYLIST echo "#EXTVLCOPT:dvb-frequency=$CHAINEFREQ" >> $PLAYLIST echo "#EXTVLCOPT:dvb-bandwidth=$CHAINEBANDWIDTH" >> $PLAYLIST echo "#EXTVLCOPT:dvb-bandwidth=$CHAINEPROGRAMME" >> $PLAYLIST #echo "dvb-t://" >> $PLAYLIST echo "dvb://" >> $PLAYLIST done echo "Le fichier $PLAYLIST est créer" echo "Pour vérifier le bon fonctionnement du fichier veuillez taper :" echo "vlc $PLAYLIST"
Salut,
Tu peux adapter la solution de dubcek à ton script en récupérant dans chaque variable que le numéro de champ qui convient...
Sinon avec sed ça donnerait ça :
Tu peux adapter la solution de dubcek à ton script en récupérant dans chaque variable que le numéro de champ qui convient...
CHAINENOM=$(awk -F"[(:_]" '{print $1}' <<<${FICHIER}) CHAINEFREQ=$(awk -F"[(:_]" '{print $3}' <<<${FICHIER}) CHAINEBANDWIDTH=$(awk -F"[(:_]" '{print $7}' <<<${FICHIER}) CHAINEPROGRAMME=$(awk -F"[(:_]" '{print $NF}' <<<${FICHIER})
Sinon avec sed ça donnerait ça :
CHAINENOM=$(sed -n 's/\([^(]*\)(.*/\1/p' <<<${FICHIER}) CHAINEFREQ=$(sed -n 's/[^:]*:\([^:]*\):.*/\1/p' <<<${FICHIER}) CHAINEBANDWIDTH=$(sed -n 's/.*BANDWIDTH_\([^_]*\)_.*/\1/p' <<<${FICHIER}) CHAINEPROGRAMME=$(sed -n 's/.*:\([^ ]*\) *$/\1/p' <<<${FICHIER})
awk -F"[(:_]" '{print $1, $3, $7, $NF}' $SOURCEFICHIER | while read CHAINENOM CHAINEFREQ CHAINEBANDWIDTH CHAINEPROGRAMME ; do ... ... done
et aussi
while read FICHIER ; do oIFS=$IFS; IFS="(:_"; set -- $FICHIER; CHAINENOM=$1; CHAINEFREQ=$3; CHAINEBANDWIDTH=$7; CHAINEPROGRAMME=${!#} IFS=$oIFS ... ... done < $SOURCEFICHIER
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Merci à tous pour vos réponse.
Dans un autre fichier je dois ajouter a chaque ligne le mot "adapater=5:"
entre le mot "satno=1:" et "frequency=10723000:"
Extrait du fichier
Comment dois je faire ?
Merci.
Merci à tous pour vos réponse.
Dans un autre fichier je dois ajouter a chaque ligne le mot "adapater=5:"
entre le mot "satno=1:" et "frequency=10723000:"
<location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location>
Extrait du fichier
<title>0004. Deepam TV</title> <location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location> <extension application="http://www.videolan.org/vlc/playlist/0"> <vlc:id>3</vlc:id> <vlc:option>program=4606</vlc:option> </extension> </track> <track> <title>0005. NPR</title> <location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location> <extension application="http://www.videolan.org/vlc/playlist/0"> <vlc:id>4</vlc:id> <vlc:option>program=4614</vlc:option> </extension> </track> <track> <title>0006. Thendral</title> <location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location> <extension application="http://www.videolan.org/vlc/playlist/0"> <vlc:id>5</vlc:id> <vlc:option>program=4622</vlc:option> </extension> </track> <track> <title>0007. RDPi Radio</title> <location>dvb-s://satno=1:frequency=10723000:voltage=18:srate=29900000</location> <extension application="http://www.videolan.org/vlc/playlist/0"> <vlc:id>6</vlc:id> <vlc:option>program=4630</vlc:option> </extension> </track> <track>
Comment dois je faire ?
Merci.