Como posso imprimir tudo antes de uma partida?

1

Depois de executar hostname , obtenho o FQDN da seguinte forma:

$ hostname
foo.mydomain.xyz

Gostaria de obter apenas o nome abreviado foo para que eu possa armazená-lo como uma variável em um script. Eu tentei algumas maneiras com awk combinando . (o ponto) mas não tive muita sorte.

    
por Mike 22.10.2014 / 02:53

2 respostas

1

Usando awk

$ echo foo.mydomain.xyz | awk -F. '{print $1}'
foo

o awk obtém sua entrada por "registros" (cujo padrão é linhas) e cada registro é dividido em "campos". Por padrão, os campos são separados por espaços em branco. Aqui, alteramos o padrão para que o separador de campo seja um período. Para este exemplo, isso significa que o primeiro campo é foo , o segundo é mydomain e o terceiro é xyz . Dizemos ao awk para imprimir apenas o primeiro campo, foo .

Para capturar o nome abreviado para uma variável de shell:

shortname=$(hostname | awk -F. '{print $1}')

Usando sed

Esse problema também pode ser resolvido com sed :

$ echo foo.mydomain.xyz | sed 's/\..*//'
foo

Aqui, o comando de substituição, s/\..*// , simplesmente procura por um período e remove o período e tudo o que se segue.

Usando o shell

$ name=foo.mydomain.xyz
$ name=${name%%.*}
$ echo $name
foo
    
por 22.10.2014 / 03:19
1

Não é necessário usar sed, awk, grep. Basta usar o sinal -s de hostname :

$ hostname -s
foo

Da página do manual:

  -s, --short
        Display the short host name. This is the host name cut at the first dot.
    
por 22.10.2014 / 07:45

Tags