Grep caractère joker "dans les deux sens"
Aguila1003
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je débute en shell et j'ai un petit problème avec la fonction grep.
Je recherche les ligne d'un fichier qui contiennent 11 22 11 .. 22 par exemple avec la fonction grep.
Le fichier contient par exemple :
11 .. 11 11 22
11 22 .. 22 22
11 11 11 11 22
11 22 11 11 22
.. 22 11 22 22
Je voudrais donc qu'il me sortent toutes les lignes qui sont égales au .. près c'est à dire :
11 .. 11 11 22
11 22 .. 22 22
11 22 11 11 22
.. 22 11 22 22
Mais visiblement le . dans le fichier où est fait la recherche n'est pas considéré comme un caractère joker et la seule ligne qu'il me sort est :
11 22 11 11 22
Est-il possible d'interpréter un symbole comme universel dans le fichier où ce fait la recherche ?
Que ce soit avec grep ou autrement !
J'ai essayer de vérifier l'égalité terme à terme mais mon fichier est trop gros et ça dure des plombes.
Merci d'avance
Je débute en shell et j'ai un petit problème avec la fonction grep.
Je recherche les ligne d'un fichier qui contiennent 11 22 11 .. 22 par exemple avec la fonction grep.
Le fichier contient par exemple :
11 .. 11 11 22
11 22 .. 22 22
11 11 11 11 22
11 22 11 11 22
.. 22 11 22 22
Je voudrais donc qu'il me sortent toutes les lignes qui sont égales au .. près c'est à dire :
11 .. 11 11 22
11 22 .. 22 22
11 22 11 11 22
.. 22 11 22 22
Mais visiblement le . dans le fichier où est fait la recherche n'est pas considéré comme un caractère joker et la seule ligne qu'il me sort est :
11 22 11 11 22
Est-il possible d'interpréter un symbole comme universel dans le fichier où ce fait la recherche ?
Que ce soit avec grep ou autrement !
J'ai essayer de vérifier l'égalité terme à terme mais mon fichier est trop gros et ça dure des plombes.
Merci d'avance
A voir également:
- Grep caractère spéciaux
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Caractere speciaux mac - Guide
- Caractère ascii - Guide
- Caractere vide - Guide
6 réponses
Salut,
Ton explication n'est pas très explicite ;-\
Il semblerait qu'en fonction du résultat souhaité (contrairement à ton explication), ceci devrait faire l'affaire :
Ton explication n'est pas très explicite ;-\
Il semblerait qu'en fonction du résultat souhaité (contrairement à ton explication), ceci devrait faire l'affaire :
$ cat plop 11 .. 11 11 22 11 22 .. 22 22 11 11 11 11 22 11 22 11 11 22 .. 22 11 22 22 $ grep '11 .. 22' plop 11 .. 11 11 22 11 11 11 11 22 11 22 11 11 22 .. 22 11 22 22 $
Ce n'est pas exactement ça que je veux faire.
Par exemple :
J'ai un fichier test2.csv qui contient
11,11,11,11,..,22,22,22
11,11,11,11,11,..,..,22
11,11,11,11,22,..,..,22
Alors que moi j'aimerais qu'il me sorte les trois.
En fait mes fichiers sont beaucoup plus long et je cherche des lignes complètes qui sont identiques pour chaque terme aux données manquantes près.
Je ne peux donc pas me contenter de faire un grep de ce qui est identique dans ces trois lignes parce que sur un fichier plus long ils me renverrait aussi des lignes qui ont des termes différents.
Les données manquantes sont les ..
Par exemple :
J'ai un fichier test2.csv qui contient
11,11,11,11,..,22,22,22
11,11,11,11,11,..,..,22
11,11,11,11,22,..,..,22
$ grep '11,11,11,11,..,22,22,22' test2.csv 11,11,11,11,..,22,22,22
Alors que moi j'aimerais qu'il me sorte les trois.
En fait mes fichiers sont beaucoup plus long et je cherche des lignes complètes qui sont identiques pour chaque terme aux données manquantes près.
Je ne peux donc pas me contenter de faire un grep de ce qui est identique dans ces trois lignes parce que sur un fichier plus long ils me renverrait aussi des lignes qui ont des termes différents.
Les données manquantes sont les ..
hello
et quelque chose comme ça ?
et quelque chose comme ça ?
$ grep -E '(11,)*[,.]*(,22)*$' test2.csv 11,11,11,11,..,22,22,22 11,11,11,11,11,..,..,22 11,11,11,11,22,..,..,22 $
Merci quand même ;)
C'est de ma faute, en voulant simplifier j'ai pas bien expliquer
Je vais essayer de réexpliquer en mettant plus de lignes.
J'ai ce fichier :
11,11,11,11,..,22,22,22
11,11,11,11,11,..,..,22
11,11,11,11,22,..,..,22
11,11,11,11,11,11,..,22
11,11,11,11,11,..,11,22
Et je veux les lignes qui sont égales à la premières au points près c'est à dire les 3 premières mais pas les deux dernières qui ont des 11 là où dans la première il y a des 22.
Grep ne considère les points comme universels que dans l'expression à rechercher (ici la première ligne), pas dans le fichier où il cherche cette expression donc je ne peux pas l'utiliser il me semble
C'est de ma faute, en voulant simplifier j'ai pas bien expliquer
Je vais essayer de réexpliquer en mettant plus de lignes.
J'ai ce fichier :
11,11,11,11,..,22,22,22
11,11,11,11,11,..,..,22
11,11,11,11,22,..,..,22
11,11,11,11,11,11,..,22
11,11,11,11,11,..,11,22
Et je veux les lignes qui sont égales à la premières au points près c'est à dire les 3 premières mais pas les deux dernières qui ont des 11 là où dans la première il y a des 22.
Grep ne considère les points comme universels que dans l'expression à rechercher (ici la première ligne), pas dans le fichier où il cherche cette expression donc je ne peux pas l'utiliser il me semble
Et comme ça :
$ cat plop 11,11,11,11,..,22,22,22 11,11,11,11,11,..,..,22 11,11,11,11,22,..,..,22 11,11,11,22,11,22,22,22 $ egrep '(11,){4}(..,|22,){3}22' plop 11,11,11,11,..,22,22,22 11,11,11,11,11,..,..,22 11,11,11,11,22,..,..,22 $
voir là c'est plus clair https://forums.commentcamarche.net/forum/affich-27165083-grep-caractere-joker-dans-les-deux-sens#12
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
est ce que je résume juste ?
toutes les lignes dont les N premiers champs sont les mêmes que les N premiers champs de la ligne 1 ou égaux à 2 points et dont les N derniers champs sont les mêmes que les N derniers champs de la ligne 1 ou égaux à 2 points, sachant que le nombre de champs est 8
essayer
$ cat fichier 11,11,11,11,..,22,22,22 11,11,11,11,11,..,..,22 11,11,11,11,22,..,..,22 11,11,11,11,11,11,..,22 11,11,11,11,11,..,11,22 $ $ awk -F, 'NR<2 {split($0, l1); print; next} {z=0; for(n=1; n<=NF; n++)if($n==l1[n] || l1[n]==".." || $n=="..")z++} z==NF' fichier 11,11,11,11,..,22,22,22 11,11,11,11,11,..,..,22 11,11,11,11,22,..,..,22 $