代码之家  ›  专栏  ›  技术社区  ›  Mason Mason

从主机名变量中提取域,不带前缀或后缀,使用sed

  •  2
  • Mason Mason  · 技术社区  · 13 年前

    我已经处理了几个小时了,似乎无法让它发挥作用。 如果我有www或ftp.somedomain.net.nz,或者只有somedomain.com,并且我想从模式中只提取somedomain,通过将主机名返回到sed来设置为变量 我该怎么做?

    例如:

    var="echo $HOSTNAME | sed 's/someregex to fit all$//'"
    
    3 回复  |  直到 13 年前
        1
  •  6
  •   William    13 年前

    你真的需要使用sed吗?

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

    请注意,这一点以及其他一些解决方案与以下问题不兼容 www.news.google.com 但如果你测试这样的事情,你可以做到:

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

    什么有效,只取决于你的输入格式有多好。

        2
  •  1
  •   244an    13 年前

    如果你知道前缀,你可以试试(“ftp.”、“www.”或什么都不知道):

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

    使用 sed ... <<< $VARIABLE 首选 echo $VARIABLE | sed ...

        3
  •  0
  •   choroba    13 年前

    双引号不会运行命令。使用后引号,或者更好的做法是使用 $(...) :

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

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

    var=${HOSTNAME#www.}
    var=${var#ftp.}
    var=${var%%.*}
    
    推荐文章