正则表达式剪切主机名

正则表达式剪切主机名

我正在尝试将我的主机名从左侧剪切为两个“部分”。主机名如下所示:

servername-01.location.domain.com

或者

servername-01.location.test.domain.com

我需要将其削减为以下内容:

servername-01.location

由于某些域名的“后缀”较长,我确实需要将前两个“部分”一直到第二个“.”,但不包括第二个“.”。

我使用下面的命令从后面删除主机名,但后来意识到后缀的子域数量可能会改变,所以这不再有效:

${HOSTNAME%.*.*}

任何帮助,将不胜感激!

答案1

您可以使用

SHORTHOST=$(cut -d "." -f 1-2 <<< $HOSTNAME)

它将在每个周期将原始主机名切成字段.并仅打印前两个。

答案2

事实上,很难通过一个参数扩展来删除这样的可变部分。但是有一种迂回的方法,我们可以先删除前两个段(我们实际上想保留它们),留下尾部,然后使用作为要从原始字符串中删除的部分。

所以:

$ hostname=servername-01.location.test.domain.com
$ echo "${hostname%.${hostname#*.*.}}"
servername-01.location

.${hostname#*.*.}.test.domain.com然后${hostname%.test.domain.com}servername-01.location。)

相关内容