1

После запуска hostname я получаю полное доменное имя следующим образом:

$ hostname
foo.mydomain.xyz

Я хотел бы получить только короткое имя foo чтобы я мог сохранить его как переменную в скрипте. Я пробовал несколько способов с awk , сопоставляя . (точка), но не повезло.

2 ответа2

1

Использование awk

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

awk получает свои данные через "записи" (по умолчанию это строки), и каждая запись делится на "поля". По умолчанию поля разделены пробелами. Здесь мы изменим значение по умолчанию, чтобы разделитель полей был точкой. В данном примере это означает, что первое поле - это foo , второе - это mydomain , а третье - xyz . Мы говорим, чтобы awk печатал только первое поле, foo .

Чтобы записать короткое имя в переменную оболочки:

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

Используя sed

Эту проблему также можно решить с помощью sed:

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

Здесь команда подстановки s/\..*// просто ищет период и удаляет период и все, что следует за ним.

Использование оболочки

$ name=foo.mydomain.xyz
$ name=${name%%.*}
$ echo $name
foo
1

Нет необходимости использовать sed, awk, grep. Просто используйте флаг -s имени hostname:

$ hostname -s
foo

Со страницы руководства:

  -s, --short
        Display the short host name. This is the host name cut at the first dot.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .