J'ai un script qui génère une sortie. Je veux vérifier cette sortie pour toute adresse IP comme
159.143.23.12
134.12.178.131
124.143.12.132
if (IPs are found in <file>)
then // bunch of actions //
else // bunch of actions //
C'est fgrep
une bonne idée?
J'ai bash disponible.
shell-script
grep
ip
Koshur
la source
la source
0010.0000.0000.0001
? Le fichier peut-il autrement contenir des éléments qui ressemblent à des adresses IP comme des numéros de version (soft-1.2.1100.1.tar.gz
, spécifications réseau (10.0.0.0/24), 1.2.3.4.5)? Accepteriez-vous une solution positive au 333.444.555.666? Ou0377.0377.0377.0377
(une adresse IP quad-octale valide)?bash
est disponible, alors il l'awk
est généralement aussi, donc cela pourrait fonctionner pour vous:awk '/([0-9]{2,3}\.){3}/ {print $5 "\t" $1}'
(Ce one-liner traduit la sortie de la liste XFR hôte au/etc/hosts
format.)Réponses:
Oui, vous avez beaucoup d'options / outils à utiliser. Je viens d'essayer ça, ça marche:
ifconfig | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
afin que vous puissiez utiliser
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
pour grep les adresses IP de votre sortie.la source
"\b([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9][0-9]?"
pour trouver des CIDR (en supposant qu'ils sont valides)commencer ma réponse sur la base de cette réponse:
et convertir la réponse en IPv6 complet, etc ...:
si vous voulez garder le / nnn s'il est là:
et il y a aussi la version abrégée d'IPv6 qui inclut '::'.
pour plus de réponses IPv6, vous pouvez consulter ici: /programming/53497/regular-expression-that-matches-valid-ipv6-addresses
la source
fgrep
est l'ancien nom d'une variantegrep
qui ignore la correspondance de motifs. Je vous recommande d' utilisergrep
(ou mêmeegrep
) à la place, d' autant plus que vous êtes bien vouloir pattern matching.Si votre fichier est appelé, par exemple,
ips
vous pouvez écrire quelque chose comme:Ensuite, vous pouvez passer les paramètres en suivant le script
la source
Testé dans SmartOS (une variante de Solaris), nous espérons qu'il devrait fonctionner dans d'autres environnements * nix:
Exemple:
Ce modèle ne correspond qu'à IPv4 valide , c'est-à-dire
x.x.x.x
où lax
plage va de 0 à 255. Si vous devez extraire uniquement l'IP correspondante, ajoutez une-o
option à la commande ci-dessus. Vous pouvez intégrer cette commande dans un script bash et probablement dans d'autres scripts shell également. Et, en cas d'egrep
échec,try grep -E ...
L'utiliser dans un script shell (bash):
ip=$(egrep -o '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt) echo $ip
la source
Si vous avez la liste des adresses IP dans un fichier, une par ligne, a
grep
déjà l'-f
option pratique :Cela peut provoquer quelques faux positifs en raison de chaînes éventuellement suivies d'un autre nombre pour en faire une IP différente. Beaucoup de choses que vous pouvez faire à ce sujet, selon votre cas, vous pouvez ou non décider de vous inquiéter.
la source
Je pense que ma réponse à un autre post est mieux adaptée ici. Grâce à ce post et à d'autres similaires, j'ai trouvé ceci, qui cherche le format IP correct, puis se débarrasse de toutes les lignes qui contiennent 256 ou plus. Remplacez l'IP par quelque chose qui n'est pas valide pour ne voir aucune sortie à la place:
Le premier grep a probablement été trouvé dans cet article et il vérifie les nombres de 0 à 999 au format XXXX
Le deuxième grep supprime les lignes avec les numéros 256-999, ne laissant ainsi que des adresses IP de format valides, donc je
MAIS ... Comme l'a souligné G-Man, j'étais dans l'erreur en supposant que l'IP serait sur sa propre ligne. Le plus souvent cependant, il y aura un espace ou un autre diviseur à rechercher de chaque côté de l'IP. Les espaces / séparateurs peuvent être supprimés avec sed ou d'autres moyens une fois l'adresse IP trouvée. J'ai également ajouté -o au premier grep:
Le premier et le second ne donneront aucune sortie, tandis que le troisième le fera et les espaces seront supprimés.
la source
grep
jetterait cette ligne à cause du «500». (La question n'a jamais dit que les adresses IP dans le fichier, le cas échéant, seraient sur une ligne par elles-mêmes.) En revanche, il acceptera 1234.1.1.1 et 1.1.1.1234. Mais à part ça, pas mal.Rediriger cette sortie vers certains
outputFile
Simplement
grep
avec un motif comme,la source
.
c'est un opérateur d'expression régulière et qu'il faut s'échapper pour qu'il soit traité littéralementla source