Contenu | Rechercher | Menus

Annonce

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 08/09/2019, à 15:23

Christophe C

Extraire une chaine entre 2 chaines

Bonjour, j'ai un fichier avec pas mal de lignes (nb variable selon les cas).
Dans chaque ligne j'ai des données variables, mais la chaîne de caractère que je souhaite extraire est toujours entre les chaines name: et class.

Par exemple
kldfj djf q name:toto;class...
kldfj djf q name:tata;class...
kldfj djf q name:tutu;class...

et je voudrais récupérer en sortie
toto
tata
tutu

Cut n'est pas adapté puisque le séparateur ne fait qu'1 seul caractère (?), donc je pense à awk, mais j'ai du mal neutral

Dernière modification par Christophe C (Le 08/09/2019, à 15:28)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

En ligne

#2 Le 08/09/2019, à 15:34

diesel

Re : Extraire une chaine entre 2 chaines

Ben..., je sais pas, mais essaye :

cut -d: -f2 toto.txt | cut -d";" -f1

Amicalement.

Jean-Marie


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#4 Le 08/09/2019, à 15:40

Christophe C

Re : Extraire une chaine entre 2 chaines

Oui, je viens de me rendre compte qu'en enchaînant des cut avec des pipes, je m'en sort très bien.

Sympa le grep, c'est élégant. Bon, j'ai 2 options, je crois que je vais garder le grep, j'aime bien smile.

merci à vous 2.


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

En ligne

#5 Le 08/09/2019, à 15:44

kamaris

Re : Extraire une chaine entre 2 chaines

Avec sed sinon :

sed -E 's/.*name:(.*);class.*/\1/' fichier

----

EDIT : si il peut y avoir dans fichier des lignes ne contenant pas le pattern recherché et qu'on ne souhaite pas afficher :

sed -nE '/.*name:(.*);class.*/{s//\1/; p}' fichier

Dernière modification par kamaris (Le 08/09/2019, à 15:57)

En ligne

#6 Le 08/09/2019, à 16:13

diesel

Re : Extraire une chaine entre 2 chaines

Christophe C a écrit :

Oui, je viens de me rendre compte qu'en enchaînant des cut avec des pipes, je m'en sors très bien.

Sympa le grep, c'est élégant. Bon, j'ai 2 options, je crois que je vais garder le grep, j'aime bien smile.

merci à vous 2.

Tu as parfaitement raison, le "grep" proposé par Nany est beaucoup plus propre et robuste que mon enchaînement de "cut". En effet, cela suppose qu'il n'y ait pas d'autres caractères ":" avant celui qui m'intéresse, ce qui est heureusement le cas dans l'exemple que tu nous as fourni, mais cela sera-t-il toujours vrai... ?

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 08/09/2019, à 16:16)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#7 Le 08/09/2019, à 16:51

Christophe C

Re : Extraire une chaine entre 2 chaines

Encore merci à tous smile


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

En ligne

#8 Le 08/09/2019, à 20:04

Watael

Re : Extraire une chaine entre 2 chaines

awk -F'[:;]' '{print $2}'

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 08/09/2019, à 22:37

Zakhar

Re : Extraire une chaine entre 2 chaines

Christophe C a écrit :

Oui, je viens de me rendre compte qu'en enchaînant des cut avec des pipes, je m'en sort très bien.

Sympa le grep, c'est élégant. Bon, j'ai 2 options, je crois que je vais garder le grep, j'aime bien smile.

merci à vous 2.

Quant à moi je préfère sed!
On peut faire tout ce que fait grep avec sed, mais la réciproque n'est pas vraie.

Par exemple, avec sed, tu pourrais aussi traiter le cas où le pattern apparaît plusieurs fois sur la ligne... si c'était le cas !

(Bon, j'avoue, après ça devient vite incompréhensible !)

Exemple, le classique :

grep foo bar.txt

Se fait :

sed -n '/foo/p' bar.txt

Dernière modification par Zakhar (Le 08/09/2019, à 22:40)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#10 Le 09/09/2019, à 07:40

Christophe C

Re : Extraire une chaine entre 2 chaines

J'utilise sed sur certaines opérations de chaines, mais j'ai toujours du mal avec cette fonction, c'est vite dur à comprendre. Disons que quand je peu faire autrement, je le fait.


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

En ligne

#11 Le 09/09/2019, à 14:15

Watael

Re : Extraire une chaine entre 2 chaines

sed n'est pas une fonction, c'est un langage, comme le shell, awk, python, perl...


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 09/09/2019, à 14:29

Zakhar

Re : Extraire une chaine entre 2 chaines

Watael a écrit :

sed n'est pas une fonction, c'est un langage, comme le shell, awk, python, perl...

C'est vrai ;-)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#13 Le 09/09/2019, à 14:47

Christophe C

Re : Extraire une chaine entre 2 chaines

C'est un poil exagéré, puisqu'on ne peut que traiter des chaines. D'ailleurs cela se présente bien comme une commande, à la limite un éditeur de texte. Mais c'est vrai que les options sont très nombreuses.


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

En ligne

#14 Le 11/09/2019, à 12:50

k3c

Re : Extraire une chaine entre 2 chaines

Watael a écrit :
awk -F'[:;]' '{print $2}'

merci Watael pour cet exemple de awk avec plusieurs caractères dans le séparateur, c'était sans doute connu de tout le monde...sauf moi !


Archlinux sur Xiaomi Air 13

Hors ligne