(débutant)grep et expression régulière

grep et expression régulière (débutant) - Shell/Batch - Programmation

Marsh Posté le 02-01-2006 à 19:09:46    

Bonjour,
J'ai une fonction media $racine qui me renvoie tous les mp3 du répertoire racine sous la forme

Code :
  1. #Mp3 n°? : titre : album : artiste : genre : année


Comment puis je faire un grep de $recherche sur l'un des champs (par exemple le 2eme)
 

Code :
  1. media $racine | grep -i  #"expressionrégulière"


je n'arive pas à construire l'expression régulière pour atteindre ce champ
 
Merci d'avance pour votre aide

Reply

Marsh Posté le 02-01-2006 à 19:09:46   

Reply

Marsh Posté le 02-01-2006 à 19:41:26    

egrep pour les expressions régulières, mais de toute façon il y a bien plus simple :

media $racine | awk -F':' '( $2 == "nom album" ) { print $0 }'


 
(selon les versions, tu peux avoir à remplacer "awk" par "nawk" ou "gawk" )

Reply

Marsh Posté le 02-01-2006 à 23:37:34    

yoshi42 a écrit :

Bonjour,
J'ai une fonction media $racine qui me renvoie tous les mp3 du répertoire racine sous la forme

Code :
  1. #Mp3 n°? : titre : album : artiste : genre : année


Comment puis je faire un grep de $recherche sur l'un des champs (par exemple le 2eme)
 

Code :
  1. media $racine | grep -i  #"expressionrégulière"


je n'arive pas à construire l'expression régulière pour atteindre ce champ
 
Merci d'avance pour votre aide


Ben grep ne sert pas à ça. grep sert à extraire des lignes entières contenant un certain pattern. Toi, tu veux extraire une certaine colonne donc c'est du "cut" qu'il te faut (ou du awk qui permet de programmer un script complet de traitement des lignes lues)
 
La solution de Elmoricq est fonctionnelle. Sinon pour ta culture perso, la syntaxe "cut" est la suivante:
media $racine |cut -f2 -d: pour demander d'extraire le second champ (-f2) en utilisant le délimiteur ":" ("-d:" )
 

Reply

Marsh Posté le 03-01-2006 à 00:42:28    

Merci pour vos réponses
 

Sve@r a écrit :

Ben grep ne sert pas à ça. grep sert à extraire des lignes entières contenant un certain pattern. Toi, tu veux extraire une certaine colonne donc c'est du "cut" qu'il te faut (ou du awk qui permet de programmer un script complet de traitement des lignes lues)
 
La solution de Elmoricq est fonctionnelle. Sinon pour ta culture perso, la syntaxe "cut" est la suivante:
media $racine |cut -f2 -d: pour demander d'extraire le second champ (-f2) en utilisant le délimiteur ":" ("-d:" )


 
Sve@r tu m'as mal compris
je ne veux pas extraire une colonne. Je veux renvoyer les lignes (ligne entière, pas juste une colonne) qui ont dans un champ PRECIS un certain pattern.
J'ai trouvé la syntaxe, par exemple pour renvoyer les lignes qui ont un titre=test, je fais:[
 

Code :
  1. media $racine | egrep -i "^[^:]*: test :[^:]*"


 
pour renvoyer les lignes qui ont un genre=humour ou un genre=pop, je fais:
 

Code :
  1. media $racine | egrep -i "^[^:]*:[^:]*:[^:]*:[^:]*: humour|pop :[^:]*"


 
 :jap:

Reply

Marsh Posté le 03-01-2006 à 06:42:06    

Vachement plus simple que awk. [:pingouino]

Reply

Marsh Posté le 03-01-2006 à 22:08:24    

yoshi42 a écrit :

Merci pour vos réponses
 
 
 
Sve@r tu m'as mal compris
je ne veux pas extraire une colonne. Je veux renvoyer les lignes (ligne entière, pas juste une colonne) qui ont dans un champ PRECIS un certain pattern.
J'ai trouvé la syntaxe, par exemple pour renvoyer les lignes qui ont un titre=test, je fais:[
 

Code :
  1. media $racine | egrep -i "^[^:]*: test :[^:]*"


 
pour renvoyer les lignes qui ont un genre=humour ou un genre=pop, je fais:
 

Code :
  1. media $racine | egrep -i "^[^:]*:[^:]*:[^:]*:[^:]*: humour|pop :[^:]*"


 
 :jap:


 
J'ai compris. Mais, contrairement à la remarque de Elmoricq, je pense que tu aurais avantage à utiliser "awk" parce que tu peux paramétrer facilement le champ qui doit contenir la valeur que tu cherches; alors qu'avec ton egrep talentueux mais... lourd, tu es obligé de spécifier un schéma incluant tous les champs précédents celui qui t'intéresse


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 04-01-2006 à 00:42:03    

Sve@r a écrit :

Mais, contrairement à la remarque de Elmoricq, je pense que tu aurais avantage à utiliser "awk"


 
C'était du second degré, je partage cette opinion. [:pingouino]  

Reply

Marsh Posté le 07-01-2006 à 01:28:37    

Elmoricq a écrit :

C'était du second degré


oups... évidemment ! j'aurais dû m'en apercevoir tout seul :jap:  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 07-01-2006 à 02:03:37    

Sve@r a écrit :

J'ai compris. Mais, contrairement à la remarque de Elmoricq, je pense que tu aurais avantage à utiliser "awk" parce que tu peux paramétrer facilement le champ qui doit contenir la valeur que tu cherches; alors qu'avec ton egrep talentueux mais... lourd, tu es obligé de spécifier un schéma incluant tous les champs précédents celui qui t'intéresse


 

Code :
  1. "^([^:]*:){4} humour|pop (:[^:]*:){1}"


marche pas ca ?


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 26-11-2010 à 13:32:18    

Bonjour,
 
je suis bloqué sur un point débile depuis des heures.
 
je veux créer un path (chemin d'un dossier avec les expressions régulières).
pour être précis, voici ce que je fais.
 
1.J'ai un fichier texte dans leque je stoque des noms des autres fichiers.
2.je parcours ce fichier ligne par ligne et je récupère le nom de fichier.
=> ça est bon.
3. je dois enlever l'extension de fichier
=> c'est bon
4. je dois chercher ce fichier s'il existe ou nom dans mon dossier
exemple.
toto.txt
=> je récupère toto
 
=> je dois chercher s'il existe toto ou toto.txt dans mon dossier C
Donc je dois utiliser une expression régulière pour vérifier les deux cas mais je n'arrive pas à construire la bonne expression.
 
merc

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed