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 27/08/2018, à 23:40

metalux

[Résolu]Besoin d'explication sur une ligne grep

Bonjour,
J'ai cette ligne:

var='name: <alsa_output.pci-0000_00_1b.0.analog-stereo>'

Selon wikipedia,

Since version 7.2, \K can be used in a pattern to reset the start of the current whole match. This provides a flexible alternative approach to look-behind assertions because the discarded part of the match (the part that precedes \K) need not be fixed in length.

Aussi je passe cette commande pour ne récupérer que le nom de la carte:

grep -oP "<\K.*[^>]" <(echo $var)

\K: supprime tout jusqu'au caractère < inclus
.* tout ce qui suit, hormis le caractère > grâce à [^>]
J'ai trouvé sur le net la syntaxe suivante qui fonctionne également mais je ne comprends pas comment le + est interprété dans la commande:

grep -oP "<\K[^ >]+"  <(echo $var)

Est-ce que les 2 lignes se comporteraient de la même façon avec n'importe quelle variable?

Dernière modification par metalux (Le 28/08/2018, à 07:55)

Hors ligne

#2 Le 28/08/2018, à 06:57

pingouinux

Re : [Résolu]Besoin d'explication sur une ligne grep

Bonjour,

grep -oP "<\K.*[^>]" <<<"$var"

Correction : Suite à la remarque de Watael #4
s'arrête avant le dernier caractère >.
s'arrête sur le dernier caractère qui n'est pas un >.

grep -oP "<\K[^ >]+"  <<<"$var"

s'arrête avant le premier caractère > ou espace.
[^ >]+ : 1 ou plus caractères qui ne sont ni des espaces ni >

<<<"$var" permet de traiter correctement des espaces multiples dans la variable

Dernière modification par pingouinux (Le 28/08/2018, à 08:18)

Hors ligne

#3 Le 28/08/2018, à 07:55

metalux

Re : [Résolu]Besoin d'explication sur une ligne grep

Merci pour cette explication détaillée. Bonne journée.

Hors ligne

#4 Le 28/08/2018, à 08:06

Watael

Re : [Résolu]Besoin d'explication sur une ligne grep

<zizanie>

$ var='name: <alsa_output.pci-0000_00_1b.0.analog-stereo>blabla'
$ grep -oP "<\K.*[^>]" <<<"$var"
alsa_output.pci-0000_00_1b.0.analog-stereo>blabla

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

Hors ligne

#5 Le 28/08/2018, à 08:15

pingouinux

Re : [Résolu]Besoin d'explication sur une ligne grep

Ah oui, je me suis trompé et vais corriger.

Hors ligne