Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/06/2007, 09h30   #1
Membre à l'essai
 
Avatar de Matmal11
 
Inscription : juillet 2006
Messages : 111
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juillet 2006
Messages : 111
Points : 21
Points : 21
Par défaut Couper une chaine de caractère

Bonjour,

Je dois lire un fichier et récupérer une partie du texte de chaque ligne.

La ligne peut être de la forme:

Citation:
Line1 Time("10:20:00") Parametre("1";"2")
Line1 Time("10:20:00")
Line1 Parametre("1";"2")
Il me faut récupérer le texte entre parenthèse à chaque fois.
J'ai essayé avec CUT mais n'y arrive pas. Il me faut mettre le résultat dans 2 variables, $TIME et $PAR.

Savez vous comment je peux récupérer dans ces variables les valeur correspondante???

Merci d'avance
Mat
Matmal11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2007, 23h04   #2
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par Matmal11
Il me faut récupérer le texte entre parenthèse à chaque fois.
J'ai essayé avec CUT mais n'y arrive pas. Il me faut mettre le résultat dans 2 variables, $TIME et $PAR.
Mat

Nota : ne fonctionne qu'en shell bash

http://www.shellunix.com/regexp.html

Code :
1
2
3
4
5
6
7
8
 
#!/bin/bash
 
while read line ; do
	TIME=`echo $line | grep -o '"[0-9][0-9]:[0-9][0-9]:[0-9][0-9]"'`
	PAR=`echo $line | grep -o '"[0-9]";"[0-9]"'`
	echo "* TIME : $TIME - PAR : $PAR"
done < test.txt

Résultat :

Code :
1
2
3
4
 
* TIME : "10:20:00" - PAR : "1";"2"
* TIME : "10:20:00" - PAR :
* TIME :  - PAR : "1";"2"
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 10h05   #3
Membre à l'essai
 
Avatar de Matmal11
 
Inscription : juillet 2006
Messages : 111
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juillet 2006
Messages : 111
Points : 21
Points : 21
J'ai oublié de préciser quelquechose.
Dans la variable TIME je peux avoir 1 ou 2 valeurs:
Citation:
Time("10:00:00")
==> $TIME = "10:00:00"

Time("10:00:00";"11:00:00")
==> $TIME = "10:00:00";"11:00:00"
Et pour les paramètres, je peux avoir de 1 a n valeurs entre guillemets:

Citation:
Parametre("1")
==> $PAR = "1"

Parametre("1";"2"...;"n")
==> $PAR = "1";"2"...;"n"
Je ne crois pas que ta solution prenne tous les cas en compte.
As-tu une autre solution???
Matmal11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 21h27   #4
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par Matmal11
J'ai oublié de préciser quelquechose.
Dans la variable TIME je peux avoir 1 ou 2 valeurs:
Et pour les paramètres, je peux avoir de 1 a n valeurs entre guillemets:

2ème et dernier essai

http://www.shellunix.com/regexp.html

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
while read line ; do
	if [[ `echo $line | grep -c Time` -eq 0 ]] ; then
		TIME=""
	else
		TIME=`echo $line | sed -e "s/^.*Time(//" -e "s/).*$//"`
	fi
	if [[ `echo $line | grep -c Parametre` -eq 0 ]] ; then
		PAR=''
	else
		PAR=`echo $line | sed -e "s/^.*Parametre(//" -e "s/).*$//"`
	fi
	echo "* TIME : $TIME - PAR : $PAR"
done < test.txt
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 09h41   #5
Membre à l'essai
 
Avatar de Matmal11
 
Inscription : juillet 2006
Messages : 111
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juillet 2006
Messages : 111
Points : 21
Points : 21
Merci beaucoup, ca marche nickel ton truc.

@++
Matmal11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h01.


 
 
 
 
Partenaires

Hébergement Web