我一直在捣乱几个小时,似乎无法让它发挥作用。 如果我有www或ftp.somedomain.net.nz或只是somedomain.com我想通过回显主机名到sed从模式中提取somedomain来设置为变量 我该怎么办呢?
例如:
var="echo $HOSTNAME | sed 's/someregex to fit all$//'"
答案 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%%.*}