Grep caractère joker "dans les deux sens"
Fermé
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
-
18 févr. 2013 à 09:52
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 - 20 févr. 2013 à 14:46
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 - 20 févr. 2013 à 14:46
A voir également:
- Grep caractère spéciaux
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Caractère ascii - Guide
- Caractere speciaux mac - Guide
- Caractère invisible - Forum Windows
6 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
18 févr. 2013 à 10:27
18 févr. 2013 à 10:27
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 $
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
Modifié par Aguila1003 le 18/02/2013 à 10:50
Modifié par Aguila1003 le 18/02/2013 à 10:50
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 ..
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
18 févr. 2013 à 10:47
18 févr. 2013 à 10:47
Il ne pourra pas te sortir les 3, et peu importe le shell, dans la mesure où UN seul motif correspond à ta regex ;-(
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
18 févr. 2013 à 11:42
18 févr. 2013 à 11:42
Mais il n'y a pas moyen de faire en sorte que les points du fichier sur lequel est fait la recherche soit aussi considéré comme des caractères quelconques ?
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
18 févr. 2013 à 11:32
18 févr. 2013 à 11:32
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 $
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
18 févr. 2013 à 11:44
18 févr. 2013 à 11:44
Pas vraiment puisque je pourrais aussi avoir un
11,11,11,22,11,22,22,22 que je ne veux pas mais qui correspondrait à la formule.
De plus je veux pouvoir généraliser le motif grep à n'importe quelle ligne
11,11,11,22,11,22,22,22 que je ne veux pas mais qui correspondrait à la formule.
De plus je veux pouvoir généraliser le motif grep à n'importe quelle ligne
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
18 févr. 2013 à 12:01
18 févr. 2013 à 12:01
quelle formule ? les premiers champs contiennent 11, les derniers 22 et entre que des points ?
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
18 févr. 2013 à 12:50
18 févr. 2013 à 12:50
Je veux dire que ça ne correspondrait pas à 11,11,11,11,..,22,22,22, ce à quoi je veux que ça corresponde
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
18 févr. 2013 à 16:16
18 févr. 2013 à 16:16
désolé, je ne comprends pas
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
18 févr. 2013 à 16:50
18 févr. 2013 à 16:50
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
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
18 févr. 2013 à 11:56
18 févr. 2013 à 11:56
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 $
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
18 févr. 2013 à 12:51
18 févr. 2013 à 12:51
ça ne va pas parce que je ne peux pas le généraliser avec un fichier où j'aurais plein de ligne et où je voudrait qu'il ne me sorte que celles qui correspondent à la premières lignes aux données manquantes (..) près.
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
19 févr. 2013 à 12:42
19 févr. 2013 à 12:42
voir là c'est plus clair https://forums.commentcamarche.net/forum/affich-27165083-grep-caractere-joker-dans-les-deux-sens#12
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
19 févr. 2013 à 13:10
19 févr. 2013 à 13:10
Bon je vais essayer d'être plus explicite :
Je veux une égalité terme à terme des 2 lignes, les points étant des jockers.
C'est à dire soit les termes (qui sont séparés par des virgules) sont égaux, soit au moins un des deux est constitué de points.
C'est plus clair ?
Je veux une égalité terme à terme des 2 lignes, les points étant des jockers.
C'est à dire soit les termes (qui sont séparés par des virgules) sont égaux, soit au moins un des deux est constitué de points.
C'est plus clair ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
19 févr. 2013 à 14:39
19 févr. 2013 à 14:39
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
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
19 févr. 2013 à 15:20
19 févr. 2013 à 15:20
Presque. C'est juste que N = 8
C'est à dire :
toutes les lignes dont tous champs sont les mêmes que les champs de la ligne 1 ou égaux à 2 points
C'est à dire :
toutes les lignes dont tous champs sont les mêmes que les champs de la ligne 1 ou égaux à 2 points
Aguila1003
Messages postés
11
Date d'inscription
lundi 18 février 2013
Statut
Membre
Dernière intervention
19 février 2013
19 févr. 2013 à 15:49
19 févr. 2013 à 15:49
Et j'oubliais :
En fait c'est plutôt :
toutes les lignes dont tous champs sont les mêmes que les champs de la ligne 1 ou égaux à 2 points ou que le champs correspondant de la ligne 1 soit égal à 2 points
Sinon avec un grep ce serait facile
En fait c'est plutôt :
toutes les lignes dont tous champs sont les mêmes que les champs de la ligne 1 ou égaux à 2 points ou que le champs correspondant de la ligne 1 soit égal à 2 points
Sinon avec un grep ce serait facile
dubcek
Messages postés
18752
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
3 octobre 2024
5 619
20 févr. 2013 à 14:46
20 févr. 2013 à 14:46
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 $