我有一组数据源URL,我想从中提取主机名/ IP地址。 我已经设法摆脱了前缀,但我在主机名之后的部分遇到麻烦。
后续部分有各种格式,如下所示:
所以,在主机名之后,我期待:,a /或什么都没有。我想删除主机名后面的所有内容。 我遇到了冒号和斜线的麻烦,特别是如果有不止一个。举个例子:portnumber:string
sed -r 's/(.*):.*/\1/
这会导致删除:string,但是:portnumber仍然存在。并且它不处理斜线。
我该如何解决这个问题?
答案 0 :(得分:0)
s|([^:/]*)[:/].*|\1|
讨论:
.*
贪婪,并且匹配:
因此,您需要匹配除:
以外的任何字符:s/([^:]*):.*/\1/
要扩展它以转发斜杠匹配,您需要切换到您的替换的不同字段分隔符。说s|||
或s###
而不是s///
,这样您就不必逃避正斜杠。
因此,使用竖条代替分隔符:
s|([^:/]*)[:/].*|\1|
答案 1 :(得分:0)
sed 's|[:/].*||'
翻译:“删除冒号或斜线,以及随后的任何内容。”