Comment créer une commande shell qui trouve des adresses IPv6 dans son stdin?Comment faire correspondre des adresses IPv6 dans un pipeline de ligne de commande
Une option consiste à utiliser:
grep -Po '(?<![[:alnum:]]|[[:alnum:]]:)(?:(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}|(?:[a-f0-9]{1,4}:){1,6}:(?:[a-f0-9]{1,4}:){0,5}[a-f0-9]{1,4})(?![[:alnum:]]:?)'
Ce RE est basé sur des idées de "Regular expression that matches valid IPv6 addresses", mais ce n'est pas tout à fait exact. Je pourrais utiliser une expression régulière encore plus laide, mais y a-t-il un meilleur moyen, une commande que je ne connais pas?
Avez-vous vraiment besoin de chercher-et look-discontinues effectuées behinds? – Anthony
Il semble que la syntaxe est fondamentalement: "8 groupes de nombres de 16 bits, séparés par deux points (:) en utilisant hexadécimal, ou point (.) Si décimale de nombre est utilisé, avec des groupes concurrents avec une valeur de 0 potentiellement s'effondrer à un double deux-points (: :) ". Je dis fondamentalement comme si c'est si facile, mais évidemment, il devient rapidement très rapide. Mais le seul vrai truc que je remarque est le mélange légal d'hex et de décimal. – Anthony
Le lookahead/behind est d'éviter de faire correspondre plus de 8 groupes, ce qui n'est évidemment pas une adresse ip6 bien formée. Votre résumé est correct, je pense. Les groupes hexadécimaux peuvent comporter jusqu'à quatre caractères. Cette réponse ne trouve pas les adresses qui utilisent la notation décimale. – JanKanis