Isso pode ser feito com cut
:
cut -d _ -f 1
por exemplo,
$ echo host100_044 2 | cut -d _ -f 1
host100
Também com awk
pode ser feito com awk -F_ '{print $1}'
(provavelmente há uma maneira mais limpa de fazer isso)
Como posso usar o awk ou o sed para imprimir uma string apenas até o primeiro caractere de sublinhado?
Antes:
host100_044 2
host101_045 2
host102_046 2
Depois:
host100
host101
host102
Isso pode ser feito com cut
:
cut -d _ -f 1
por exemplo,
$ echo host100_044 2 | cut -d _ -f 1
host100
Também com awk
pode ser feito com awk -F_ '{print $1}'
(provavelmente há uma maneira mais limpa de fazer isso)
Outra alternativa para o sed:
echo 'host100_044 2' | sed 's/^\(.*\)_.*$//'
Se você os tiver em um arquivo, poderá chamá-lo da seguinte maneira:
cat fileName | sed 's/^\(.*\)_.*$//'
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} {printf("host%s ", $1)}' | cut -d ' ' -f2-
Saída:
host100 host101 host102
Com novas linhas:
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'
Saída:
host100
host101
host102
Usando sed
:
echo host100_044 2 | sed 's;_.*;;'
Usando sed
na opção de edição de lugar,
sed -i.old 's;_.*;;' infile
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100
O -F'_'
instrui awk
a usar sublinhados como delimitadores de campo. O script awk
em si apenas imprime o primeiro campo.
Tags unix bash-scripting unix-utils