Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3140 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [résolu] cut et grep

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] cut et grep

n°2205586
natha31
Posté le 06-10-2013 à 14:43:47  profilanswer
 

Bonjour.
 
Je voudrais créer un script qui conserve les lignes d'un fichiers qui commencent par l'un des mots spécifié par l'utilisateur.
 
Exemple :
$more file
Paul a 15 ans
Henry a 13 ans
Judith a 7 ans
Théo a 5 ans
 
$sh ./monscript file Paul,Judith,Théo
 
$more file
Paul a 15 ans
Judith a 7 ans
Théo a 5 ans

 
Pour l'instant, j'ai pu faire :
echo $(cut $2 -d"," -f1)
qui sépare les mots du 2eme argument
 
cat $1 | grep '\(^Paul\|^Judith\|^Théo\)' > $FILENAME
qui crée un fichier avec uniquement  les lignes qui m'intéressent.
 
Mais je ne sais pas comment associer les 2.
 
Merci à vous !


Message édité par natha31 le 07-10-2013 à 12:07:26
mood
Publicité
Posté le 06-10-2013 à 14:43:47  profilanswer
 

n°2205658
olivthill
Posté le 06-10-2013 à 23:41:56  profilanswer
 

L'utilitaire grep a une option -v qui fait ça.
 
Par exemple pour avoir le fichier sans la ligne contenant Paul, faire  :

grep file -v Paul >newfile


 
Edit : Oups, j'ai mal lu la question.
 
Pour conserver des lignes contenant une ou plusieurs chaines de caractères particulières, utiliser egrep.
Par exemple pour avoir le fichier avec seulement les lignes Paul, Judith, et Théo  :

egrep "Paul|Judith|Theo" file >newfile


Message édité par olivthill le 06-10-2013 à 23:48:21
n°2205662
natha31
Posté le 07-10-2013 à 01:27:34  profilanswer
 

Merci olivthill.
Mon souci est en fait d'automatiser le truc et de remplacer les Paul|Judith|Theo par des variables, pour pouvoir appeler le programme tel que je l'ai mentionné plus haut :) .


Message édité par natha31 le 07-10-2013 à 01:28:27
n°2205671
Soileh
Lurkeur professionnel
Posté le 07-10-2013 à 08:24:20  profilanswer
 

:hello: !
 
Tu as la solution suivante (à ne pas conseiller je pense  :whistle: ) : tu remplaces toutes les virgules de ton argument par la chaîne suivante : " \\\|^", ce qui donne :
 

Code :
  1. PAT=$(echo "^"$2|sed 's/,/\\\|^')
  2. cat $1 | grep $PAT > $FILENAME


Par contre je n'ai pu tester que sur Cygwin, mais ça marche [:cupra]
 
:jap:


---------------
And in the end, the love you take is equal to the love you make
n°2205675
olivthill
Posté le 07-10-2013 à 08:44:38  profilanswer
 

ou

egrep "$2|$3|$4" $1 >$FILENAME

Message cité 1 fois
Message édité par olivthill le 07-10-2013 à 08:44:57
n°2205688
natha31
Posté le 07-10-2013 à 12:06:49  profilanswer
 

olivthill a écrit :

ou

egrep "$2|$3|$4" $1 >$FILENAME



 
Ça me parait plus propre en effet :)
Par contre le nombre d'arguments est variable, donc j'ai fait plutôt ceci :
 

Code :
  1. file=$1
  2. filter=$2
  3. shift 2
  4. for word in $@ ; do
  5. filter=$filter"|"$word
  6. done
  7. cat $file | egrep $filter > sortie


 
Merci à vous !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [résolu] cut et grep

 

Sujets relatifs
shell grep access_logsProgress Bar avec find et grep
grep caractère joker "dans les deux sens"[Shell/Unix] Equivalence à "grep -v"
[bash] grep sur des lignes très longues, souciFaire un grep sous windows
grep sur les logsShell/Batch grep + sed
[Résolu] bash - grep et expressions régulièresproblème de grep avec la commande system
Plus de sujets relatifs à : [résolu] cut et grep


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)