我有这两个
http://www.example.com:8888/index.php
http://home.example.com:8888/index.php
(home
可以是任何东西,但www
)
并想要得到这个:
example.com
home.example.com
最好以某种可读的方式,这样我就可以了解一年后它是如何工作的。
这是我的尝试:
echo http://www.example.com:8888/index.php | awk -F[/:\'www\'] '{print $7}'
但结果是
.example.com
(注意点)应用于 www.example.com 时
home.example.com
如果我可以使用print $4
它,但我更愿意在两种情况下使用相同的打印子句。
谢谢。
答案1
sed
解决方案:
sed -E 's~http://(www\.)?([^:]+).*~\2~' file
~
- 视为sed
子命令分隔符-E
- 允许扩展正则表达式(www\.)?
- 匹配可选www.
部分([^:]+)
- 匹配任何字符序列,除了:
输出:
example.com
home.example.com
答案2
分三步:
://
删除URL 中直到 的所有内容。- 删除第一个字符串之后
/
或:
剩余字符串中的所有内容。现在,您只剩下原始 URL 中的主机名。 - 删除您不需要的位,例如
www.
从主机名的开头删除。
sed -e 's@^.*://@@' -e 's/[/:].*$//' -e 's/^www\.//'
在您的示例 URL 上运行此命令将产生
example.com
home.example.com
使用awk
:
awk -F'[/:]+' '{ sub("^www\.", "", $2); print $2 }'
:
这将输入行视为由任意数量的连续或分隔的字段记录/
。这意味着主机名将在每行的第二个字段中可用。
这sub()
将简单地删除主机名中我们不感兴趣的部分(此处www.
位于主机名的开头)。
答案3
使用 GNU awk 及其字段模式定义FPAT
:
awk -v FPAT='([^/]+\\.)+[^:/]+' '{print $1}'
字段模式设置为字符序列,不包括/
后跟的点.
,并且必须以 或:
终止/
。
对于 URL 来说可能有点过于宽松,但它可以捕获带端口号和不带端口号的 FQDN。