特定字符

时间:2018-02-19 11:58:26

标签: regex sed

我有一组数据源URL,我想从中提取主机名/ IP地址。 我已经设法摆脱了前缀,但我在主机名之后的部分遇到麻烦。

后续部分有各种格式,如下所示:

  • 为空(行以主机名结尾,后续没有字符)
  • :端口号
  • :端口号:字符串
  • :端口号/串
  • /串
  • //串

所以,在主机名之后,我期待:,a /或什么都没有。我想删除主机名后面的所有内容。 我遇到了冒号和斜线的麻烦,特别是如果有不止一个。举个例子:portnumber:string

sed -r 's/(.*):.*/\1/

这会导致删除:string,但是:portnumber仍然存在。并且它不处理斜线。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

s|([^:/]*)[:/].*|\1|

讨论:

.*贪婪,并且匹配:

因此,您需要匹配除:以外的任何字符:s/([^:]*):.*/\1/

要扩展它以转发斜杠匹配,您需要切换到您的替换的不同字段分隔符。说s|||s###而不是s///,这样您就不必逃避正斜杠。

因此,使用竖条代替分隔符: s|([^:/]*)[:/].*|\1|

答案 1 :(得分:0)

sed 's|[:/].*||'

翻译:“删除冒号或斜线,以及随后的任何内容。”