我一直在搞砸这个几个小时,似乎无法让它工作。如果我有 www 或 ftp.somedomain.net.nz 或只是 somedomain.com 并且我想从模式中提取 somedomain 以通过将主机名回显到 sed 来设置为变量,我该怎么做?
例如:
var="echo $HOSTNAME | sed 's/someregex to fit all$//'"
我一直在搞砸这个几个小时,似乎无法让它工作。如果我有 www 或 ftp.somedomain.net.nz 或只是 somedomain.com 并且我想从模式中提取 somedomain 以通过将主机名回显到 sed 来设置为变量,我该怎么做?
例如:
var="echo $HOSTNAME | sed 's/someregex to fit all$//'"
你真的需要使用 sed 吗?
HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME%%.*}"
请注意,这和其他一些解决方案不会与类似的东西相处,www.news.google.com
但如果你测试类似的东西,你可以这样做:
HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME#*.}"
HOSTNAME="${HOSTNAME%%.*}"
有效的方法仅取决于您输入的格式有多好。
如果您知道可以尝试的前缀(“ftp.”、“www.”或什么都没有):
var=$(sed -E 's/^((ftp|www)\.)?([^.]*)\..*/\3/' <<< "$HOSTNAME")
sed ... <<< $VARIABLE
优先使用echo $VARIABLE | sed ...
双引号不运行命令。使用反引号,或者更好的是,使用$(...)
:
var=`sed 's/[^.]*\.\([^.]*\)\..*/\1/' <<< "$HOSTNAME"`
var=$( sed 's/[^.]*\.\([^.]*\)\..*/\1/' <<< "$HOSTNAME" )
您可能必须调整正则表达式才能获得域。你想要地址的哪一部分?这些例子相当不清楚。如果只想去掉 www 或者 ftp,可以使用参数扩展:
var=${HOSTNAME#www.}
var=${var#ftp.}
var=${var%%.*}