Réponses:
Cela peut être fait avec cut:
cut -d _ -f 1par exemple
$ echo host100_044 2 | cut -d _ -f 1
host100
Aussi avec awkpeut être fait avec awk -F_ '{print $1}'(il y a probablement une façon plus propre de le faire)
Une autre alternative pour sed:
echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'Si vous les avez dans un fichier, vous pouvez l'appeler comme suit;
cat fileName | sed 's/^\(.*\)_.*$/\1/'echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} {printf("host%s ", $1)}'  | cut -d ' ' -f2-Production:
host100 host101 host102Avec les nouvelles lignes:
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'Production:
host100
host101
host102
En utilisant sed:
echo host100_044 2 | sed 's;_.*;;'
En utilisant l' sedoption d'édition sur place,
sed -i.old 's;_.*;;' infileawksolution est déjà publiée (et cutest probablement la meilleure dans ce cas), car il m'a posé des questions sed, mais vous m'avez battu avec quelques secondes :-). Vous pouvez même supprimer le $, car il correspondra .*à la fin de la ligne par défaut.
                    $ echo "host100_044 2" | awk -F'_' '{print $1}'
host100
Le -F'_'demande awkd'utiliser des traits de soulignement comme délimiteurs de champ. Le awkscript lui-même imprime simplement le premier champ.
Cela imprimera la sortie avant _:
sed 's/_.*//' -filename