10 votes

Formatage de l'IP avec sed

J'essaie de comprendre comment faire ce qui suit avec sed :

J'ai une liste d'adresses IPv4 et j'essaie de les rendre toutes uniformes dans l'affichage. Donc, par exemple : 1.2.4.32 serait 001.002.004.032 . 10.125.62.1 serait 010.125.062.001 .

J'essaie d'utiliser sed pour le faire parce que c'est ce que j'apprends en ce moment.

J'ai ces deux-là, qui prennent n'importe quel nombre à un ou deux chiffres et ajoutent des zéros au début.

sed 's/\<[0-9][0-9]\>/0&/g' file
sed 's/\<[0-9]\>/00&/g' file

Mais cela pose un problème plus pratique dans la mesure où mon fichier d'entrée contiendra des chiffres à un ou deux chiffres à d'autres endroits que l'adresse IP. Exemple :

host-1 1.2.3.32

J'ai donc besoin d'un moyen pour qu'il recherche l'adresse IP complète, ce que je pensais pouvoir réaliser de la manière suivante

sed 's/\.\<[0-9]\>/00&/g'

mais non seulement cela ignore le cas de 1.something.something.something mais il ajoute également l'élément 00 à la fin du 3ème octet pour une raison quelconque.

echo "10.10.88.5" | sed 's/\.\<[0-9]\>/00&/g'
10.10.8800.5

Un exemple de fichier :

Jumpstart Server jumo     10.20.5.126
Jumpstart Server acob     10.20.5.168
NW1 H17  Node cluster     10.10.161.87
NW1 H17  Node-1       10.10.161.8
NW1 H17  Node-2       10.10.161.9
ts-nw1      10.10.8.6

3voto

sjsam Points 186
$ cat 37222835.txt
Jumpstart Server jumo     10.20.5.126 10.29.23.24
Jumpstart Server acob     10.20.5.168 dig opt
Jumpstart Server reac     251.218.212.1 rel
NW1 H17  Node cluster     10.10.161.87
NW1 H17  Node-1       10.10.161.8
NW1 H17  Node-2       10.10.161.9
ts-nw1      10.10.8.6
Nw2 HW12 Node-3       192.168.0.1
cluster

Faire :

sed -n 's/\([1]\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\{1\}\.'\
'\([1]\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\{1\}\.'\
'\([1]\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\{1\}\.'\
'\([1]\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5] \)/00\1\.00\2\.00\3\.00\4/g;
s/0\+\([0-9]\{3\}\)/\1/g;p' 37222835.txt

donne :

Jumpstart Server jumo     010.020.005.126 010.029.023.024
Jumpstart Server acob     010.020.005.168 dig opt
Jumpstart Server reac     251.218.212.001 rel
NW1 H17  Node cluster     010.010.161.087
NW1 H17  Node-1       010.010.161.008
NW1 H17  Node-2       010.010.161.009
ts-nw1      010.010.008.006
Nw2 HW12 Node-3       192.168.000.001
cluster

Avantage par rapport à l'approche mentionnée par @benjamin-w

Cela peut remplacer plusieurs adresses IP dans la même ligne.

Inconvénient (l'approche mentionnée par @benjamin-w y remédie)

S'il y avait un mot à dire Node-000234 il serait changé en Node-234 . En fait, vous pourriez travailler sur la deuxième commande de substitution pour obtenir le comportement souhaité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X