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 04/03/2007, 00h22   #1
Invité de passage
 
Inscription : juin 2005
Messages : 5
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 5
Points : 2
Points : 2
Par défaut script débutant

Bonjour,

je souhaite rechercher une chaine de caractere dans un fichier. ( j'utilise grep mais je n'ai pas tout ce que je souhaite ... ).

J'aimerai récupérer le numéro de ligne ainsi que le numéro de la colonne pour savoir où se situe exactement la chaine recherché dans le fichier, le numéro de ligne est assez aisé avec "grep -n" mais pour récupéré le numéro de la colonne je ne vois pas comment faire.

Si vous avez une idée, merci d'avance de ma la communiquer.

A bientot.
HeZiX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2007, 12h07   #2
Invité de passage
 
Inscription : juin 2005
Messages : 5
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 5
Points : 2
Points : 2
J'ai un fichier test.txt
Code :
1
2
3
4
5
6
 
        options/extend_source
        subroutine AFFICHAGE(CARTE,DEFINITION_CARTE)
        implicit none
	EXIT
        	EXIT
J'ai essayé ca :
ici $keyword vaut EXIT

Code :
1
2
3
4
5
6
7
8
grep -n $keyword test.txt |
while
	read line
do
	num_ligne=ligne:$(echo $line | cut -d : -f 1)
	num_col=colonne:$(echo `expr index "$line" $keyword`)
	echo $num_ligne,$num_col
done
j'obtiens :

Code :
1
2
ligne:4,colonne:4
ligne:5,colonne:5
alors qu'il devrait afficher :
ligne:4,colonne:8
ligne:5,colonne:16

une tabulation est égale a 8 espaces je ne vois pas comment faire pour bien compter.

Merci d'avance
HeZiX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2007, 12h40   #3
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 292
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 292
Points : 2 740
Points : 2 740
Citation:
Envoyé par HeZiX
J'ai un fichier test.txt
Code :
1
2
3
4
5
6
 
        options/extend_source
        subroutine AFFICHAGE(CARTE,DEFINITION_CARTE)
        implicit none
	EXIT
        	EXIT
J'ai essayé ca :
ici $keyword vaut EXIT

Code :
1
2
3
4
5
6
7
8
grep -n $keyword test.txt |
while
	read line
do
	num_ligne=ligne:$(echo $line | cut -d : -f 1)
	num_col=colonne:$(echo `expr index "$line" $keyword`)
	echo $num_ligne,$num_col
done
j'obtiens :

Code :
1
2
ligne:4,colonne:4
ligne:5,colonne:5
alors qu'il devrait afficher :
ligne:4,colonne:8
ligne:5,colonne:16

une tabulation est égale a 8 espaces je ne vois pas comment faire pour bien compter.

Merci d'avance
le "truc" bête et méchant dans ce genre de situation est tout simplement d'ajouter un "filtre" entre le fichier texte original et la fonction grep :
filtre dont la fonction sera de remplacer toutes les tabulations par N espaces…
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2007, 12h55   #4
Invité de passage
 
Inscription : juin 2005
Messages : 5
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 5
Points : 2
Points : 2
merci j'ai réussi avec un petit sed placé avant le grep :

Code :
1
2
3
4
5
6
7
8
9
sed -e 's/	/        /g' $2 | grep -n $keyword |
while
	read line
do
	num_ligne=ligne:$(echo $line | cut -d : -f 1)
	colonne=`expr index "$line" $keyword`
	num_col=colonne:$(echo `expr  $colonne - 3`)
	echo $num_ligne,$num_col
done
HeZiX 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 19h04.


 
 
 
 
Partenaires

Hébergement Web