# Besoin d'aide grep



## Nioubi (5 Octobre 2008)

Bonjour,
j'aurais besoin d'un coup de main avec grep, après plusieurs heures à chercher sur google j'ai toujours pas trouvé mon bonheur.
en fait je la solution doit être toute bête mais bon...
je cherche juste à trouver les lignes d'un fichier contenant QUE des caractères alphanumériques, et les placer dans un autre fichier.
le problème c'est que lorsque je fais:

cat fichier_entree | grep [:alphanum:] > fichier_sortie 

il me donne aussi les lignes qui contiennent des caractères non désirés comme #,*,$,? etc...

et je n'arrive pas à exclure ces caractères du résultat avec ^[...] même en ajoutant un anti-backslash comme indiqué sur les man pages de grep...

voilà, j'espere que je suis suffisament clair.
merci d'avance.


----------



## ntx (5 Octobre 2008)

Pour utiliser des expressions régulières, il faut passer par egrep ou mettre le flag "-E".


----------



## Nioubi (5 Octobre 2008)

merci ça me permet de ne plus avoir d'erreurs dans le terminal  ;
mais il me reste un problème: comment faire un "non" logique dans les expressions régulières?
par exemple: "non alphanumérique".
pour le "ou" logique c'est avec "|" mais j'ai pas vu comment faire le "non"....


----------



## supermoquette (5 Octobre 2008)

Nioubi a dit:


> merci ça me permet de ne plus avoir d'erreurs dans le terminal  ;
> mais il me reste un problème: comment faire un "non" logique dans les expressions régulières?
> par exemple: "non alphanumérique".
> pour le "ou" logique c'est avec "|" mais j'ai pas vu comment faire le "non"....



man sed


----------



## supermoquette (5 Octobre 2008)

supermoquette a dit:


> man sed



Oui j'ai honte.


----------



## Nioubi (5 Octobre 2008)

mhhh
ca va surement m'aider mais comme tu dis tu peux avoir honte! 
la doc est assez longue, je verrai ça demain.


----------



## tatouille (15 Octobre 2008)

supermoquette a dit:


> Oui j'ai honte.



faut pas 

man perl


----------



## Zoidberg (15 Octobre 2008)

Je ne sais pas si t'as trouve ta solution depuis le temps, mais au cas ou...
L'option -v sert a ca non? ou j'ai pas bien compris ce que tu souhaites.


----------



## tatouille (15 Octobre 2008)

Zoidberg a dit:


> Je ne sais pas si t'as trouve ta solution depuis le temps, mais au cas ou...
> L'option -v sert a ca non? ou j'ai pas bien compris ce que tu souhaites.



-v except


----------



## Nioubi (21 Octobre 2008)

Oui j'ai réussi en utilisant grep avec les options -E -v .
J'ai fait: cat fichier_entrée | grep -E -v "[caractères a virer]" > fichier_sortie 
Faut juste faire gaffe à certains caractères qui ont une significations particulière de les faire précéder de \ .
j'ai essayé de regarder avec la commande sed, les scripts en perl aussi mais j'ai vite abandonné, j'avais pas assez de temps a consacrer à ça, et puis ce qui compte c'est le résultat .
Merci à tous pour l'aide .


----------



## supermoquette (22 Octobre 2008)

grep -E -v "[caractères a virer]" <fichier_entrée >fichier_sortie


----------



## Zoidberg (22 Octobre 2008)

tu peux aussi supprimer le '<' ca revient au meme et tu economises ton clavier et tes doigts 
et quand je parlais de l'option -v, c'etait de cette maniere:
grep -E "recherche" fichierbase | grep -E -v "aexclure" > fichierresultat


----------

