2

我一直在搞砸这个几个小时,似乎无法让它工作。如果我有 www 或 ftp.somedomain.net.nz 或只是 somedomain.com 并且我想从模式中提取 somedomain 以通过将主机名回显到 sed 来设置为变量,我该怎么做?

例如:

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

3 回答 3

6

你真的需要使用 sed 吗?

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

请注意,这和其他一些解决方案不会与类似的东西相处,www.news.google.com但如果你测试类似的东西,你可以这样做:

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

有效的方法仅取决于您输入的格式有多好。

于 2013-03-05T00:38:58.690 回答
1

如果您知道可以尝试的前缀(“ftp.”、“www.”或什么都没有):

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

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

于 2013-03-05T00:26:14.787 回答
0

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

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

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

var=${HOSTNAME#www.}
var=${var#ftp.}
var=${var%%.*}
于 2013-03-05T00:21:40.167 回答