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

jda*_*mae 22 unix

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

我可以使用什么命令?这将是第一个时期之前的任何事情.

pil*_*row 23

你在shell变量中有服务器名吗?你在使用类似sh的shell吗?如果是这样,

${SERVERNAME%%.*}
Run Code Online (Sandbox Code Playgroud)

会做你想做的.


Pab*_*ruz 21

你可以使用cut:

echo "testsrv1.main.corp.loc.domain.com" | cut -d"." -f1
Run Code Online (Sandbox Code Playgroud)

  • 这并不是真正在 shell 脚本中执行此操作,而是要求“cut”执行此操作。 (2认同)

Ant*_*mer 19

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

echo $HOSTNAME-->my.server.domain
echo ${HOSTNAME%%.*}-->my
Run Code Online (Sandbox Code Playgroud)

测试了两个相当不同的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)


小智 13

尝试使用-s开关:hostname -s

  • 正是我要找的。谢谢! (4认同)

小智 5

我使用 command cutawkbashsed变量

手术

过孔切割

[flying@lempstacker ~]$ echo "testsrv1.main.corp.loc.domain.com" | cut -d. -f1
testsrv1
[flying@lempstacker ~]$
Run Code Online (Sandbox Code Playgroud)

通过awk

[flying@lempstacker ~]$ echo "testsrv1.main.corp.loc.domain.com" | awk -v FS='.' '{print $1}'
testsrv1
[flying@lempstacker ~]$
Run Code Online (Sandbox Code Playgroud)

通过sed

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

通过Bash 变量

[flying@lempstacker ~]$ hostName='testsrv1.main.corp.loc.domain.com'
[flying@lempstacker ~]$ echo ${hostName%%.*}
testsrv1
[flying@lempstacker ~]$
Run Code Online (Sandbox Code Playgroud)