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   -
Bonjour,

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:

5 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
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
$  
1
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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
#!/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"
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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...

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})
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
awk -F"[(:_]" '{print $1, $3, $7, $NF}' $SOURCEFICHIER | while read CHAINENOM CHAINEFREQ CHAINEBANDWIDTH CHAINEPROGRAMME ; do 
... 
...  
done
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
et aussi
while read FICHIER ; do 
oIFS=$IFS; IFS="(:_"; set -- $FICHIER; CHAINENOM=$1; CHAINEFREQ=$3; CHAINEBANDWIDTH=$7; CHAINEPROGRAMME=${!#}
IFS=$oIFS
...
...
done < $SOURCEFICHIER
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xunil2003 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   14
 
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:"
<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.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
sed '/satno=1/{s/:/&adapater=5&/2}' fichier
0