2016-10-12 1 views
0

Je BEAGLEBONE carte personnalisée basée noire,
Je veux extraire l'adresse IP d'une interface eth0 et remplacer quatrième octet par 0.
J'utilise ci-dessous une doublure pour extraire ip,une doublure pour extraire l'adresse IP avec le dernier octet remplacé par 0

ip addr show eth0 | awk '$1=="inet"{print $2}' 
output : 192.168.2.158/24 

Expected output : 192.168.2.0/24 

mais je ne suis pas en mesure de faire quatrième octet 0, je pensais d'utiliser la fonction gsub cependant pas en mesure d'obtenir la bonne combinaison. :(

Je ne veux plus des tuyaux dans la commande

Toute suggestion/pointeurs

Toute autre suggestion

+0

N'êtes-vous pas remplacer la quatrième là-bas? – 123

+0

A-t-il GNU awk? – 123

+0

@ 123 oups .. vous droite je veux remplacer 4ème. – AnkurTank

Répondre

2

Sur la base de la production attendue.?. Le remplacement du quatrième octet

ip addr show eth0 |awk '/inet/{split($2,a,".");split($2,b,"/");print a[1] "." a[2] "." a[3] ".0/" b[2]}' 
142.133.152.0/25 

Si son 3ème octet:

ip addr show eth0 |awk '/inet/{split($2,a,".");print a[1] "." a[2] ".0." a[4] }' 
142.133.0.192/25 
+0

Cela correspond à inet et inet6 – 123

+0

non, j'ai ajouté un espace après 'inet'. –

+1

Oh d'accord, n'a pas vu que – 123

1

Est-ce que ça vous convient?

ip addr show eth0 | awk '$1=="inet" {gsub(".[0-9]*/24",".0/24",$2);print $2}' 
+0

Je ne veux pas coder en dur '/ 24'. – AnkurTank

+0

Je voulais dire que je ne veux pas que '/ 24' soit codé en dur. – AnkurTank

1

Vous pouvez remplacer le dernier octet de l'adresse et la barre oblique avec 0/:

ip addr show eth0 | awk '$1=="inet"{sub(/[0-9]+\//, "0/", $2); print $2}' 
1

Avec sed

$ ip addr show eth0 | sed -nE '/^\s*inet\b/ s/^\s*inet\s*(([0-9]+\.){3})[0-9]+(\S+).*/\10\3/p' 
192.168.1.0/24 
  • /^\s*inet\b/ filtre nécessaire uniquement en ligne
  • s/^\s*inet\s*(([0-9]+\.){3})[0-9]+(\S+).*/\10\3/ capture s equence of numbers suivi de . trois fois, omettre la séquence de numéros suivante, puis capturer les caractères non-espace. Utilisez un autre selon l'exigence
  • Certaines versions peuvent fonctionner avec sed -nr au lieu de sed -nE
+0

dans la commande busybox shell (ash) ci-dessus ne fonctionne pas :(Juste curieux lorsque sed est un mélange de '/' et '\' n'est pas bon d'utiliser ':' ou '|' comme séparateur? s: : : p' ou sed 's | | p'. Je fais généralement cela. Y a-t-il des fuites? – AnkurTank

+0

traiter avec '/' ce qui n'est pas le cas dans mon exemple ... 'ne pas travailler' est trop large .. qu'est-ce qui va mal? erreur msg? – Sundeep

+0

Je reçois erreur suivante' sed: option invalide - 'E' BusyBox v1.20.2 (2016-09-23 19:08:29 EDT) binaire multi-appel Utilisation: sed [-inr] [-f FICHIER] ... [-e CMD] ... [FICHIER] ... ou: sed [-inr] CMD [FICHIER] ... ' – AnkurTank