2009-07-31 7 views
1

En utilisant OS X, je besoin d'un script bash d'une ligne à regarder un nom d'hôte mac client comme: 12345-BA-PreSchool-LT.localtexte Extrait du nom d'hôte

Lorsque les 5 premiers chiffres sont une série d'actifs nombre, et les traits d'union séparent un code d'unité commerciale d'un nom de département suivi de quelque chose comme «LT» pour désigner un ordinateur portable.

Je suppose que je dois faire écho le nom d'hôte et d'utiliser une combinaison de sed, awk et peut-être coupé pour supprimer des caractères à me laisser avec:
« BA PreSchool »

Toute aide très appréciée. Voilà ce que j'ai jusqu'à présent:

echo $HOSTNAME | sed 's/...\(...\)//' | sed 's/.local//' 

Répondre

4
echo "12345-BA-PreSchool-LT.local" | cut -d'-' -f2,3 | sed -e 's/-/ /g' 

(pas sur Mac OS X, donc je ne sais si coupe est définie)

+0

pourquoi ne pas sed -e 'y/-//' ou utilisation tr? –

+0

Excellent, oui la coupe est définie et votre ligne fonctionne! Merci. – chop

3

Je tiens à garder les choses simples :)

Vous pourriez faire avec juste coupé:

echo 12345-BA-PreSchool-LT.local | cut -d"-" -f2,3 
BA-PreSchool 

Si vous souhaitez supprimer le trait d'union que vous pouvez utiliser tr

echo 12345-BA-PreSchool-LT.local | cut -d"-" -f2,3 | tr "-" " " 
BA PreSchool 
+0

Cela fonctionne aussi! Merci. – chop

3

Que diriez-vous

echo $HOSTNAME | awk 'BEGIN { FS = "-" } ; { print $2, $3 }' 
+0

Et aussi je confirme que cela fonctionne aussi pour moi. Merci pour l'aide. – chop

0

Awk peut résoudre votre question facilement.

echo "12345-BA-PreSchool-LT.local" | awk -F'-' '$0=$2" "$3' 
BA PreSchool 
0
bash$ string="12345-BA-PreSchool-LT.local" 
bash$ IFS="-" 
bash$ set -- $string 
bash$ echo $2-$3 
BA-PreSchool