unix命令用于提取主机名的一部分

时间:2011-03-11 03:01:52

标签: unix

我想提取此主机名testsrv1的第一部分  来自UNIX中的testsrv1.main.corp.loc.domain.com,在shell脚本中。

我可以使用什么命令?这将是第一个时期.

之前的任何事情

7 个答案:

答案 0 :(得分:22)

shell变量中是否有服务器名称?您使用的是sh - shell吗?如果是的话,

${SERVERNAME%%.*}

会做你想做的事。

答案 1 :(得分:16)

您可以使用cut

echo "testsrv1.main.corp.loc.domain.com" | cut -d"." -f1

答案 2 :(得分:16)

建立在pilcrow的答案之上,不需要新的变量,只需使用内置的$ HOSTANME。

echo $HOSTNAME-->my.server.domain
echo ${HOSTNAME%%.*}-->my

在两个相当不同的Linux上进行测试。

2.6.18-371.4.1.el5,GNU bash,版本3.2.25(1)-release(i386-redhat-linux-gnu)   3.4.76-65.111.amzn1.x86_64,GNU bash,版本4.1.2(1)-release(x86_64-redhat-linux-gnu)

答案 3 :(得分:12)

尝试使用-s开关: 主机名-s

答案 4 :(得分:4)

我使用命令cutawksed bash变量

操作

通过剪切

[flying@lempstacker ~]$ echo "testsrv1.main.corp.loc.domain.com" | cut -d. -f1
testsrv1
[flying@lempstacker ~]$

通过 awk

[flying@lempstacker ~]$ echo "testsrv1.main.corp.loc.domain.com" | awk -v FS='.' '{print $1}'
testsrv1
[flying@lempstacker ~]$

通过 sed

[flying@lempstacker ~]$ echo "testsrv1.main.corp.loc.domain.com" | sed -r 's@([^.]*).(.*)@\1@g'
testsrv1
[flying@lempstacker ~]$

通过 Bash变量

[flying@lempstacker ~]$ hostName='testsrv1.main.corp.loc.domain.com'
[flying@lempstacker ~]$ echo ${hostName%%.*}
testsrv1
[flying@lempstacker ~]$

答案 5 :(得分:1)

您可以使用IFS通过所需的任何令牌拆分文本。对于域名,我们可以使用点号/句点字符。

#!/usr/bin/env sh

shorthost() {
  # Set IFS to dot, so that we can split $@ on dots instead of spaces.
  local IFS='.'

  # Break up arguments passed to shorthost so that each domain zone is
  # a new index in an array.
  zones=($@)

  # Echo out our first zone
  echo ${zones[0]}
}

例如,如果这在您的脚本中,则在运行test时会得到shorthost test.example.com。您可以调整它以适合您的用例,但是我认为,知道如何将区域划分为数组是一件大事。

我想提供此解决方案,因为当您可以使用IFS在shell中轻松而完全地完成另一个进程时,我觉得生成另一个进程是过大的。需要注意的一件事是,某些用户会建议您进行类似hostname -s之类的操作,但这在BSD用户领域不起作用。例如,我认为MacOS用户没有-s标志。

答案 6 :(得分:0)

您可以使用" uname -n"只获取主机名。