Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

Ubuntu 18.04 LTS
Ubuntu-fr propose des clés USB de Ubuntu et toutes ses « saveurs » ainsi qu'un magnifique t-shirt pour cette toute nouvelle version d'Ubuntu !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/03/2018, à 19:31

ar barzh paour

[Résolu] utilisation antislash

la solution en post #2 : espaces superflus avec en plus  simplification avec option -w de grep

f="tmp.txt"
echo "yad;ComboBox" > $f
mot1="ComboBox"
mot2=""

res=$(head -1 "$f"  | grep -iE "(^$mot1;?$)|(^$mot1;.*$)|(^.*;$mot1;?$)|(^.*;$mot1;.*$)" | grep -i "$mot2"  )
echo $res
res=$(head -1 "$f"  | grep -iE "(^$mot1;?$)|(^$mot1;.*$)|(^.*;$mot1;?$)|(^.*;$mot1;.*$)" | \
                     grep -i "$mot2"  )
echo $res
res=$(head -1 "$f"  | grep -iE "(^$mot1;?$)|(^$mot1;.*$)| \
                                (^.*;$mot1;?$)|(^.*;$mot1;.*$)" | \
                      grep -i "$mot2"  )
echo $res

les 2 premières echo $res donnent bien yad;ComboBox
par contre le 3ème echo ne donne rien est-ce "normal"

je pensais qu'on pouvait utiliser \ n'importe où dans la ligne

Dernière modification par ar barzh paour (Le 04/04/2018, à 12:32)


Ubuntu 16.04 64 bits (depuis juillet 2016) , 18.04 septembre 2018 (essai en 12/2017)
Ubiuntu 16.04 (07/2016) et diverses versions  Ubuntu 14.04 ,  Studio 14.04 LTS 64 bits , MATE 16.04
(03/2018) : PC          : Intel(R) Pentium(R) CPU G4600 @ 3.60GHz  + 4GiB RAM DDR4-2400
(06/2017) : Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz

Hors ligne

#2 Le 26/03/2018, à 19:45

pingouinux

Re : [Résolu] utilisation antislash

Bonsoir,
C'est bien compliqué ton histoire…
Le problème vient des espaces qui sont insérées dans la chaîne de recherche.
Il faut remplacer

res=$(head -1 "$f"  | grep -iE "(^$mot1;?$)|(^$mot1;.*$)| \
                                (^.*;$mot1;?$)|(^.*;$mot1;.*$)" | \
                      grep -i "$mot2"  )

par

res=$(head -1 "$f"  | grep -iE "(^$mot1;?$)|(^$mot1;.*$)|\
(^.*;$mot1;?$)|(^.*;$mot1;.*$)" | \
                      grep -i "$mot2"  )

En ligne

#3 Le 31/03/2018, à 12:20

ar barzh paour

Re : [Résolu] utilisation antislash

@pingouinux
merci par ta réponse
je ne suis pas chez moi , je n'avais pas vu ta réponse
en fait
j'avais écrit cette 3ème solution pour que ce soit plus lisible visuellement , c'est tout , la première m'allait très bien

sinon compliqué ? il y a peut-être plus simple ...
ce que je cherche :
tous les fichiers dans un répertoire dont la première ligne contient exactement "mot1" , avec éventuellement en plus "mot2" ( mais xxxmot2yyy conviendra )

la première ligne  des fichiers contient des mots séparés par un point virgule , sauf le dernier mot qui peut ou non être suivi d'un point virgule

par exemple , sans considérer le mot2 , toutes ces lignes conviendront
mot1
mot1;
mot1;alpha
alpha;mot1
alpha;mot1;
alpha;mot1;beta
alpha;mot1;beta;

ne conviendront pas
xxmot1
xxmot1;
mot1xx
mot1xx;
alpha;xmot1;beta
alpha;mot1x;beta

et tout un tas d'autres combinaisons

mot2 lui pourra se trouver partout sous la forme xxxmot2yyy ou xxxmot2yyy; (xxx et yyy pouvant être vide)


Ubuntu 16.04 64 bits (depuis juillet 2016) , 18.04 septembre 2018 (essai en 12/2017)
Ubiuntu 16.04 (07/2016) et diverses versions  Ubuntu 14.04 ,  Studio 14.04 LTS 64 bits , MATE 16.04
(03/2018) : PC          : Intel(R) Pentium(R) CPU G4600 @ 3.60GHz  + 4GiB RAM DDR4-2400
(06/2017) : Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz

Hors ligne

#4 Le 31/03/2018, à 13:02

pingouinux

Re : [Résolu] utilisation antislash

Pour mot1

... | grep -wE ';?mot1;?' 

Ajouté :
Ou peut-être cela est-il suffisant

... | grep -w 'mot1' 

Dernière modification par pingouinux (Le 31/03/2018, à 13:25)

En ligne

#5 Le 31/03/2018, à 18:31

ar barzh paour

Re : [Résolu] utilisation antislash

du fichier rech.txt ci dessous
mot1
mot1;
mot1;alpha
alpha;mot1
alpha;mot1;
alpha;mot1;beta
alpha;mot1;beta;
xxmot1
xxmot1;
mot1xx
mot1xx;
alpha;xmot1;beta
alpha;mot1x;beta
MOT1

grep -iw 'mot1' rech.txt
mot1
mot1;
mot1;alpha
alpha;mot1
alpha;mot1;
alpha;mot1;beta
alpha;mot1;beta;
MOT1

à  priori l'option -w répond à ce que je désire


de man grep option -w

Sélectionnez uniquement les lignes contenant des correspondances qui forment ensemble
              mots. Le test est que la sous-chaîne correspondante doit être soit
              au début de la ligne, ou précédé d'un non-mot
              caractère constitutif. De même, il doit être soit à la fin
              de la ligne ou suivi d'un caractère constitutif non-mot.
              Les caractères constituant un mot sont des lettres, des chiffres et
              souligner.

je testerai en rentrant chez moi
bon week-end


Ubuntu 16.04 64 bits (depuis juillet 2016) , 18.04 septembre 2018 (essai en 12/2017)
Ubiuntu 16.04 (07/2016) et diverses versions  Ubuntu 14.04 ,  Studio 14.04 LTS 64 bits , MATE 16.04
(03/2018) : PC          : Intel(R) Pentium(R) CPU G4600 @ 3.60GHz  + 4GiB RAM DDR4-2400
(06/2017) : Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz

Hors ligne

#6 Le 31/03/2018, à 19:17

erresse

Re : [Résolu] utilisation antislash

Hello !
Moi, j'ai plutôt ça dans le man :

       -w, --word-regexp
              Ne sélectionner que les lignes contenant des correspondances formant des mots complets. La  sous-chaîne  correspondante  doit  donc  soit  se
              trouver  au  début de la ligne, soit être précédée d'un caractère ne pouvant entrer dans la constitution d'un mot. De même, elle doit soit se
              trouver à la fin de la ligne, soit être suivie par un caractère ne pouvant entrer dans la constitution d'un mot. Les caractères composant les
              mots sont les lettres, les chiffres et le souligné « _ ».

C'est quand même un plus lisible, non ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#7 Le 03/04/2018, à 18:33

ar barzh paour

Re : [Résolu] utilisation antislash

merci eresse pour le man en français ....
plus exactement ce que j'ai dans le man :

       -w, --word-regexp
              Select  only  those  lines  containing  matches  that form whole
              words.  The test is that the matching substring must  either  be
              at  the  beginning  of  the  line,  or  preceded  by  a non-word
              constituent character.  Similarly, it must be either at the  end
              of  the  line  or  followed by a non-word constituent character.
              Word-constituent  characters  are  letters,  digits,   and   the
              underscore

ce que j'ai mis dans le post 5 est une traduction googgle , il est vrai que c'est un peu du franco-chinois , mais ça me dépanne
j'aimerai bien avoir tout le man en français


Ubuntu 16.04 64 bits (depuis juillet 2016) , 18.04 septembre 2018 (essai en 12/2017)
Ubiuntu 16.04 (07/2016) et diverses versions  Ubuntu 14.04 ,  Studio 14.04 LTS 64 bits , MATE 16.04
(03/2018) : PC          : Intel(R) Pentium(R) CPU G4600 @ 3.60GHz  + 4GiB RAM DDR4-2400
(06/2017) : Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz

Hors ligne

#8 Le 03/04/2018, à 18:50

erresse

Re : [Résolu] utilisation antislash

Regarde les paquets que tu as d'installés : manpages, manpages-dev, manpages-fr et manpages-fr-extra chez moi...


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#9 Le 04/04/2018, à 12:21

ar barzh paour

Re : [Résolu] utilisation antislash

merci eresse je viens d'installer manpages-fr et manpages-fr-extra , évidemment c'est plus parlant
donc même résultat maintenant que le post #6 , en français


Ubuntu 16.04 64 bits (depuis juillet 2016) , 18.04 septembre 2018 (essai en 12/2017)
Ubiuntu 16.04 (07/2016) et diverses versions  Ubuntu 14.04 ,  Studio 14.04 LTS 64 bits , MATE 16.04
(03/2018) : PC          : Intel(R) Pentium(R) CPU G4600 @ 3.60GHz  + 4GiB RAM DDR4-2400
(06/2017) : Portable : Intel(R) Core(TM)2  Duo CPU     T5750  @ 2.00GHz 3Go de RAM DDR2 667 Mhz

Hors ligne