awk / sed para imprimir apenas até o caractere de sublinhado

8

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
    
por Rubstr 16.05.2012 / 18:39

5 respostas

16

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)

    
por 16.05.2012 / 18:51
2

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/^\(.*\)_.*$//'
    
por 21.06.2012 / 12:45
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-

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
    
por 16.05.2012 / 18:56
1

Usando sed :

echo host100_044 2 | sed 's;_.*;;'


Usando sed na opção de edição de lugar,

sed -i.old 's;_.*;;' infile
    
por 16.05.2012 / 19:21
1
$ 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.

    
por 28.06.2016 / 13:25