C'est probablement ce dont vous avez besoin (notez que cela ne fonctionnera pas sur Ubuntu 16.04) :
#!/bin/bash
IFACE='eth0'
ifconfig | grep -A 7 "$IFACE" | sed -nr 's/^.*netmask\s([0-9\.]+)\s\sbroadcast.*$/\1/p'
Dans la première ligne, le nom de l'interface réseau est assigné comme valeur de la variable $IFACE
- c'est utile pour les scripts, sinon vous pouvez utiliser grep -A 7 'eth0'
.
Sur la deuxième ligne, la sortie de la commande ifconfig
sera acheminé vers le grep
où l'option -A 7
affichera les 7 lignes suivantes après la ligne contenant la chaîne/explication correspondante. La sortie de cette commande sera envoyée à sed
.
Dans le cadre de la sed
commandement :
-
l'expression régulière ^.*netmask\s(.*)\s\sbroadcast.*$
correspondra à la ligne entière, du début à la fin. ^
jusqu'à la fin $
qui contient des caractères .*
et les "mots-clés" netmask\space
, [0-9\.]+
y \s\sbroadcast
dans cet ordre précis ;
-
cette ligne sera substituée ( s/old/new/
) avec le contenu du premier groupe de capture [ (.*)
-> \1
], où le regexp [0-9\.]+
correspondra aux chaînes de caractères qui sont composées de chiffres et de points ;
-
l'option -r
(ou -E
) activera les expressions régulières étendues, ce qui, dans ce cas, nous permettra d'utiliser librement les parenthèses rondes ;
-
l'option -n
avec la combinaison du drapeau p
avec la sortie uniquement de la ligne correspondante et conservera le reste de la sortie de sed
.
Voici un exemple étendu qui analysera les noms de toutes les interfaces réseau et fera la même chose que la commande ci-dessus pour chacune d'entre elles :
for IFACE in $(ifconfig | sed -nr 's/(^[a-z0-9]+):.*/\1/p'); do \
echo -en "${IFACE}:\t"; ifconfig | \
grep -A 7 "$IFACE" | \
sed 's/ broadcast.*$//' | \
sed -rn 's/^.*netmask (.*)$/\1/p'; \
done
Exemple de sortie de la commande ci-dessus exécutée sur une machine virtuelle avec Ubuntu 18.04 :
$ for IFACE in $(ifconfig | sed -nr 's/(^[a-z0-9]+):.*/\1/p'); do echo -en "${IFACE}:\t"; ifconfig | grep -A 7 "$IFACE" | sed 's/..broadcast.*$//' | sed -rn 's/^.*netmask (.*)$/\1/p'; done
ens33: 255.255.255.0
lo: 255.0.0.0