Hvordan matcher jeg IP-adressen ved at bruge 'findstr'? Eller nogen anden metode til batch i Windows

Indlæg af Hanne Mølgaard Plasc

Problem



        Som titlen sagde, vil jeg matche ip-adresse med batch i Windows, fortæl mig hvordan jeg kan gøre det?


        Jeg ser at ' findstr ' kan matche med regex som ' [[0-9]] ', men hvordan kan 'findstr' en til tre gange ?

Bedste reference


Siden findstr s regex support er lidt ... dateret, kan du normalt ikke bruge de fleste regexes, du finder på internettet. Følgende matcher fire kurser med cifre, adskilt af prikker:


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


Men hvis du kun er interesseret i adresser og ikke undernetmaskerne, vil du måske gerne bruge den


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


Og ja, hvis det også ville matche ting som Address: 232345.534.78678.345, som åbenbart ikke er en IP-adresse. Men normalt spytter ipconfig ikke sådanne strings.

Andre referencer 1


FINDSTR er den eneste native batch utility, der har nogen støtte til regulære udtryk. Men støtten er meget begrænset og ikke-standard. Det eneste gentagne udtryk understøttes, er *. Desuden er det begrænset til maksimalt 15 tegnklassevilkår (se Hvad er de ukendte funktioner og begrænsninger i Windows FINDSTR-kommandoen?). Så jeg tror ikke, det er muligt at udvikle en oprindelig batchregex, der netop svarer til en IP-adresse.


Du kan forblive i native Windows-værktøjer og bruge Power Shell, eller du kan bruge JScript eller VBScript via CSCRIPT-kommandoen. Alle tre har meget bedre regex support.


Alternativt kan du downloade et af en række Windows-porte i Unix-hjælpeprogrammer, mange af dem gratis. GnuWin32 er en god ressource (indeholder grep): http://gnuwin32.sourceforge.net/[12]

Andre referencer 2


En forenklet regex-streng ville være


(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]


for at matche nøjagtigt rækkevidden af ​​tilladte IP-adresser.


EDIT: Baseret på kommentarer nedenfor og Regelmæssige udtryk i findstr information, skal du ændre ovenstående regex til [0-2][0-9][0-9].[0-2][0-9][0-9].[0-2][0-9][0-9].[0-2][0-9][0-9] for at matche IP-adresser. Tilsyneladende FINDSTR er virkelig det, der er begrænset til regelmæssig udtryksfortolkning.

Andre referencer 3


Hvis indtastningen af ​​din findstr-kommando ikke skal være resultatet af ipconfig,
Du kan bruge følgende kodekode for at søge efter en ip-adresse i en tekst- eller csv-fil.


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


Det tilføjer til metakarakter til svaret fra bruger Joey. '\ <' i begyndelsen og
  '>' i slutningen. Selv om en sådan streng måske ikke er meget almindelig (eller meget usandsynlig
at forekomme) dette sikrer, at ingen streng i et ip-adresse-lignende format, men med en
alfabetisk karakter ved enden og/eller begyndelsen (fx A198.252.206.16 eller 198.252.206.16A) returneres.