Respuestas:
Esto se puede hacer con cut
:
cut -d _ -f 1
p.ej
$ echo host100_044 2 | cut -d _ -f 1
host100
También awk
se puede hacer con awk -F_ '{print $1}'
(probablemente haya una forma más limpia de hacerlo)
Otra alternativa para sed:
echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'
Si los tiene en un archivo, puede llamarlo de la siguiente manera;
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-
Salida:
host100 host101 host102
Con nuevas líneas:
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'
Salida:
host100
host101
host102
Utilizando sed
:
echo host100_044 2 | sed 's;_.*;;'
Usando la sed
opción de edición en el lugar,
sed -i.old 's;_.*;;' infile
awk
solución ya está publicada (y cut
probablemente sea la mejor en este caso), ya que preguntó por él sed
, pero me ganaste con segundos :-). Incluso puede quitar el $
, ya que coincidirá .*
con el final de la línea de forma predeterminada.
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100
Las -F'_'
instrucciones awk
para utilizar guiones bajos como delimitadores de campo. El awk
script en sí solo imprime el primer campo.
Esto imprimirá la salida antes de _
:
sed 's/_.*//' -filename