从主机名变量中提取域而不带前缀或带有sed的后缀

时间:2013-03-05 00:17:36

标签: bash subdomain regex-negation

我一直在捣乱几个小时,似乎无法让它发挥作用。 如果我有www或ftp.somedomain.net.nz或只是somedomain.com我想通过回显主机名到sed从模式中提取somedomain来设置为变量 我该怎么办呢?

例如:

var="echo $HOSTNAME | sed 's/someregex to fit all$//'"

3 个答案:

答案 0 :(得分:6)

你真的需要使用sed吗?

HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME%%.*}"

请注意,这个以及其他一些解决方案不会与www.news.google.com相提并论,但如果您测试的是类似的东西:

HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME%%.*}"

什么有效取决于你的输入是如何形成的。

答案 1 :(得分:1)

如果您知道可以尝试的前缀(" ftp。"," www。"或者什么都没有):

var=$(sed -E 's/^((ftp|www)\.)?([^.]*)\..*/\3/' <<< "$HOSTNAME")

使用sed ... <<< $VARIABLE优先于echo $VARIABLE | sed ...

答案 2 :(得分:0)

双引号不运行命令。使用反引号,或者更好,使用$(...)

var=`sed 's/[^.]*\.\([^.]*\)\..*/\1/' <<< "$HOSTNAME"`
var=$( sed 's/[^.]*\.\([^.]*\)\..*/\1/' <<< "$HOSTNAME" )

您可能需要调整正则表达式才能获取域名。你想要的地址的哪一部分?这些例子相当不清楚。如果您只想删除www或ftp,可以使用参数扩展:

var=${HOSTNAME#www.}
var=${var#ftp.}
var=${var%%.*}