Ceci est pour une mission donc je n'ai pas d'autre choix que d'utiliser sed.
Étant donné un fichier messages , comment puis-je extraire toutes les adresses IP et les imprimer?
J'ai d'abord essayé
sed -n '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' messages
Mais cela n’imprimait rien. Après quelques recherches, j'ai découvert que sed ne supportait pas les opérateurs non-cupides comme? et |
Je me suis fait mal au cerveau, mais je ne peux pas trouver un moyen de faire cela sans les opérateurs non avides. Comment puis-je faire ceci?
Utilisez sed -r
(regex étendu) ou échappez les groupes de capture avec \
grep conviendra mieux ici (si vous avez sed
, vous devriez aussi avoir grep
):
grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' messages
Ceci est votre propre regex
sans modification (testé OK)
Si vous avez GNU sed
, vous pouvez simplement ajouter le drapeau -r
pour utiliser les ERE:
sed -rn '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' file
Sinon, vous devrez échapper à certains caractères:
sed -n '/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)/p' file
Ces personnages incluent:
(
, )
{
, }
|
?
En règle générale (bien que ce ne soit pas votre cas), j’utilise les éléments suivants pour faire correspondre l’adresse IP:
sed -rn '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' file
Ou en mode de compatibilité:
sed -n '/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/p' file
Vous pouvez faire cela aussi:
Les fenêtres:
ipconfig | Perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | sed '2 d' | head -n1;
OSX:
ifconfig | Perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | sed '1 d' | head -n1;