2012-11-01 6 views
0

Avec cette commande, j'aimerais qu'une commande n'obtienne que l'adresse mac actuelle et une autre commande pour obtenir uniquement le mac permanent. Donc je dois utiliser une expression grep, mais je ne sais pas quoi faire.Renvoie une partie d'un résultat (GREP)

$ macchanger -s wlan0 
    Permanent MAC: 14:25:47:ff:c4:aa (Twinhan) 
    Current MAC: 00:24:54:f0:5c:cc (unknown) 

Donc, je voudrais vraiment faire quelque chose comme macchanger -s wlan0 | grep ... afin d'exactement 14 obtenir: 25: 47: ff: c4: aa Et une autre commande pour obtenir 00: 24: 54: f0: 5c: cc Merci vous

Répondre

2

Pour obtenir la ligne 'permanente':

macchanger -s wlan0 | awk '/Permanent/ { print $3 }' 

Pour obtenir la ligne 'actuelle':

macchanger -s wlan0 | awk '/Current/ { print $3 }' 
+0

Merci, c'est la meilleure façon de traiter la question x) Je ne savais pas awk, cela me semble vraiment utile. – sidney

1

Je pense que vous seriez mieux arrêt à l'aide sed que grep:

macchanger -s wlan0 | sed -n '/^Permanent/s/Permanent MAC: \([0-9a-fA-F:]*\) .*/\1/p' 
macchanger -s wlan0 | sed -n '/^Current/s/Current MAC: \([0-9a-fA-F:]*\) .*/\1/p' 

Cela fonctionnerait avec un POSIX conforme sed; GNU sed a parfois un esprit propre, mais il les accepte et fonctionne comme prévu.

+0

Il n'y a aucune raison de faire correspondre '^ Permanent' en dehors de l'expression' s /// '. Ajoutez simplement '^' au début de la correspondance de modèle de l'expression 's ///' si vous voulez vous assurer qu'il est ancré. –

0

L'option -o-grep fera ce que vous voulez. Par exemple:

grep -o '[0-9a-f:]\{17\}' 
+0

Cela ramasserait les deux adresses à chaque fois. –

+0

True. Je n'étais pas clair à partir de la question initiale si cela était désiré. edit: Si je l'avais lu plus attentivement, je suppose que c'était assez clair. :-) –

1

Si vous voulez grep:

macchanger -s wlan0 | grep Permanent | grep -P -o '..:..:..:..:..:..' 
macchanger -s wlan0 | grep Current | grep -P -o '..:..:..:..:..:..' 
1

Un seul grep pour chaque adresse:

grep -P -o '(?<=Permanent MAC:)[a-zA-Z0-9:]+' 
grep -P -o '(?<=Current MAC:)[a-zA-Z0-9:]+' 
0

Cette solution dépend de l'ordre des résultats dans la sortie:

declare -a results 
results=($(macchangher -s wlan0 | egrep -oi '([a-f0-9]{2}:){5}[a-f0-9]{2}')) 
perm=$results[0] 
cur=$results[1] 
Questions connexes