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 22/11/2018, à 06:37

ar barzh paour

[Résolu] sed et récupératon entre guillemets

bonjour à tous
voilà mon problème :
je voudrais récupérer dans une variable avec sed ce qu'il y a entre les guillemets d'une ligne qui contient LABEL="........."
(EDIT : awk m'irait aussi bien  )
j'ai trituré la ligne mais je n'y arrive pas directement

ligne='...".."....LABEL="x y z t".........."....."..'
var=$(echo "${ligne}"|sed 's/.*LABEL=\"\(.*\)".*/\1/')
echo $var
x y z t".........."....."..

ce qui ne va pas je pense c'est 
".* qui se trouve après \(.*\)

remarque
j'y suis arrivé avec
tmp1=${ligne#*LABEL=\"} # supprimer ce qu'il y a avant LABEL="
                        # !!!!! la ligne ci-dessus fait perdre la colorisation syntaxique  de gedit !!!!!
                        # vieux problème que j'avais soulevé mais non résolu
tmp2=${tmp1%%\"*}      #dans ce que l'on vient de récupérer supprimer ce qu'il y a après "

Dernière modification par ar barzh paour (Le 29/11/2018, à 18:24)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 22/11/2018, à 06:46

pingouinux

Re : [Résolu] sed et récupératon entre guillemets

Bonjour,
Avev sed

sed -r 's/.*LABEL="([^"]+)".*/\1/' <<<"$ligne"

Avac grep

grep -Po '(?<=LABEL=")[^"]+' <<<"$ligne"

Hors ligne

#3 Le 22/11/2018, à 07:02

ar barzh paour

Re : [Résolu] sed et récupératon entre guillemets

merci pingouinux
j'interprète ([^"]+ ) : mémoriser 1 à n fois sauf "
utilisation des Ere avec sed , je n'utilise pas suffisamment pour y penser ... et trouver la bonne syntaxe en plus
je vais pouvoir simplifier mon script
pour grep , je ne connais pas perl ....

Dernière modification par ar barzh paour (Le 22/11/2018, à 10:10)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#4 Le 22/11/2018, à 07:05

pingouinux

Re : [Résolu] sed et récupératon entre guillemets

j'interprète ([^"]+ ) : mémoriser 1 à n fois sauf "

Oui, c'est une suite non nulle de caractères différents de "

Hors ligne

#5 Le 23/11/2018, à 08:32

ar barzh paour

Re : [Résolu] sed et récupératon entre guillemets

aïe ça va pas , enfin si fonctionne assez bien pour LABEL
mais si je remplace LABEL par UUID (hé hé) ça ne va plus
explication ci-dessous
OK

LABEL=$(echo ${ligne}|sed -r 's/.*LABEL="([^"]+)".*/\1/')

/dev/sda2: LABEL="U18.04-a2-64b" UUID="adb3563a-ddba-4f75-8e82-7df3e3d2a4a5" TYPE="ext4" PTTYPE="dos" PARTUUID="00096b93-02"
LABEL : U18.04-a2-64b

UUID=$(echo ${ligne}|sed -r 's/.*UUID="([^"]+)".*/\1/')

pas bon , il prend ce qui se trouve après PARTUUID="
UUID : 00096b93-02

en ajoutant espace devant le terme recherché ça devrait fonctionner

UUID=$(echo ${ligne}|sed -r 's/.* UUID="([^"]+)".*/\1/')

UUID : adb3563a-ddba-4f75-8e82-7df3e3d2a4a5

Dernière modification par ar barzh paour (Le 23/11/2018, à 09:17)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#6 Le 23/11/2018, à 08:47

Watael

Re : [Résolu] sed et récupératon entre guillemets

salut,

quelle est la commande qui affiche ces informations ?
n'est-elle pas paramétrable pour n'afficher que les informations qui t'intéressent ? d'ailleurs, quelles sont-elles ?

de ce que je vois, lsblk peut le faire...


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

Hors ligne

#7 Le 23/11/2018, à 09:04

pingouinux

Re : [Résolu] sed et récupératon entre guillemets

Ajouter \b devant la chaîne à rechercher, qui représente une chaîne vide.

sed -r 's/.*\bUUID="([^"]+)".*/\1/' <<<"$ligne"
grep -Po '(?<=\bUUID=")[^"]+' <<<"$ligne"

Hors ligne

#8 Le 23/11/2018, à 09:35

diesel

Re : [Résolu] sed et récupératon entre guillemets

Watael a écrit :

salut,

quelle est la commande qui affiche ces informations ?
n'est-elle pas paramétrable pour n'afficher que les informations qui t'intéressent ? d'ailleurs, quelles sont-elles ?

de ce que je vois, lsblk peut le faire...

La commande, ce doit être "blkid".

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

#9 Le 23/11/2018, à 09:40

ar barzh paour

Re : [Résolu] sed et récupératon entre guillemets

@watael
c'est soit blkid soit un fichier construit à la main
lsblk , je ne connaissais pas à l'époque où j'ai commencé mon script , ça m'obligerait à revoir pas mal de choses..
l'avantage de lsblk c'est la non utilisation de sudo
mais je n'arrive pas à obtenir NAME UUID LABEL sur la même ligne

jpb@jpb-POWERMATE-VL280:~$ lsblk  -a -o +LABEL -o +UUID
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT      UUID

├─sda1    8:1    0 372,6G  0 part /media/film     f028ddf3-d3d9-49fa-a32f-e824801e87f0

@pingouinux trop fort pour moi

\bUUID

Dernière modification par ar barzh paour (Le 23/11/2018, à 09:41)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#10 Le 23/11/2018, à 09:47

Watael

Re : [Résolu] sed et récupératon entre guillemets

$ lsblk -nl -oNAME,UUID,LABEL
$ while read -r name uuid label; do test -n "$uuid" && echo "$name $uuid $label"; done < <(lsblk -nl -o name,uuid,label)

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

Hors ligne

#11 Le 23/11/2018, à 10:14

ar barzh paour

Re : [Résolu] sed et récupératon entre guillemets

@watael
merci pour la syntaxe


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#12 Le 23/11/2018, à 10:17

pingouinux

Re : [Résolu] sed et récupératon entre guillemets

Tu peux aussi récupérer directement ce qui t'intéresse :

LABEL=$(lsblk -no label /dev/sda2)
UUID=$(lsblk -no uuid /dev/sda2)

Hors ligne

#13 Le 23/11/2018, à 10:36

Watael

Re : [Résolu] sed et récupératon entre guillemets

mais ça veut dire exécuter plusieurs fois la commande. hmm


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

Hors ligne