Comment faire correspondre l’adresse IP en utilisant ‘findstr’? Ou toute autre méthode de traitement par lots dans les fenêtres

Comme le titre l’a dit, je veux faire correspondre l’adresse IP avec le lot dans Windows, s’il vous plaît dites-moi comment je peux le faire?
Je vois que ” findstr ” peut correspondre à regex comme ” [0-9] “, mais comment “findstr” peut-il apparaître une à trois fois ?

Puisque le support regex de findstr est un peu findstr , vous ne pouvez généralement pas utiliser la plupart des expressions régulières que vous trouvez sur le Web. Ce qui suit correspond à quatre séries de chiffres, séparées par des points:

 ipconfig | findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" 

Toutefois, si vous êtes uniquement intéressé par les adresses et non par les masques de sous-réseau, vous pouvez utiliser

 ipconfig | findstr /r "Address.*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" 

Et oui, si correspondrait également à des choses comme l’ Address: 232345.534.78678.345 qui n’est évidemment pas une adresse IP. Mais généralement, ipconfig ne crache pas de telles chaînes.

FINDSTR est le seul utilitaire de traitement par lots natif qui prend en charge les expressions régulières. Mais le support est très limité et non standard. La seule expression répétée prise en charge est * . En outre, il est limité à un maximum de 15 termes de classe de caractère (voir Quelles sont les fonctionnalités et limitations non documentées de la commande Windows FINDSTR? ). Je ne pense donc pas qu’il soit possible de développer une expression rationnelle par lots native qui corresponde précisément à une adresse IP.

Vous pouvez restr dans les utilitaires Windows natifs et utiliser Power Shell, ou utiliser JScript ou VBScript via la commande CSCRIPT. Tous les trois ont un meilleur support regex.

Vous pouvez également télécharger un certain nombre de ports Windows d’utilitaires Unix, dont beaucoup sont gratuits. GnuWin32 est une bonne ressource (inclut grep): http://gnuwin32.sourceforge.net/

Une chaîne de regex simpliste serait

(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.(1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.(1?[0-9]?[0-9]|2[0-4][0-9])|25[0-5]

pour correspondre exactement à la plage d’adresses IP autorisées.

EDIT: Basé sur les commentaires ci-dessous et les expressions régulières dans les informations findstr , modifiez le regex ci-dessus à [0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9]\.[0-2][0-9][0-9] pour faire correspondre les adresses IP. Apparemment, FINDSTR est vraiment limité dans l’interprétation des expressions régulières.

Si l’entrée de votre commande findstr ne résulte pas d’ipconfig, vous pouvez utiliser la ligne de code suivante pour rechercher une adresse IP dans un fichier texte ou csv.

 findstr /r "\<[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\>" filename.txt 

Il ajoute aux métacaractères à la réponse de l’utilisateur Joey. “\ <" au début et “>” à la fin. Bien qu’une telle chaîne puisse ne pas être très courante (ou très improbable), cela garantit qu’aucune chaîne dans un format de type adresse IP, mais avec un caractère alphabétique à la fin et / ou au début (par exemple, A198.252.206. 16 ou 198.252.206.16A) est renvoyé.