Réponses:
Cela peut être fait avec cut
:
cut -d _ -f 1
par exemple
$ echo host100_044 2 | cut -d _ -f 1
host100
Aussi avec awk
peut ê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 host102
Avec 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' sed
option d'édition sur place,
sed -i.old 's;_.*;;' infile
awk
solution est déjà publiée (et cut
est 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 awk
d'utiliser des traits de soulignement comme délimiteurs de champ. Le awk
script lui-même imprime simplement le premier champ.
Cela imprimera la sortie avant _
:
sed 's/_.*//' -filename