【问题标题】:sed command with regexp带有正则表达式的 sed 命令
【发布时间】:2020-05-21 11:20:10
【问题描述】:

我不明白这个命令使用“sed”的结果。

例如:

echo "Here is my website: https://mywebsite.blabla/files" | sed -e 's/.* //g'

结果:

https://mywebsit.blabla/files

现在我添加第二个“https”:

echo "Here is my https website: https://mywebsite.blabla/files" | sed -e 's/.* //g'

同样,sed 的结果是一样的。

据我了解,s/.* //g 表示替换任何匹配任何零个或多个字符的任何内容和一个没有任何内容的空格 (//),直到链的末尾。 显然我错过了一些东西。

有什么想法吗?

【问题讨论】:

  • 为什么不应该一样呢?您将替换所有内容,直到最后一个空格。 https 与您匹配的内容无关。
  • 欢迎来到 SO。 .* 是贪婪匹配,它将匹配到最后一个空格,因此它不会在最后一个 https 和最后一个空格之前停止匹配。
  • 尝试将您的模式放入regex101.com;它将准确地解释发生了什么。

标签: regex bash sed


【解决方案1】:

sed -e 's/.* //g' 使用 sed 的 sed -e 's/<search>/<replace>/g' 函数。

在您的示例中,搜索模式是.*,它将匹配:

  • .每个字符
  • *0次以上
  • 直到一个空格

现在结果看起来合乎逻辑:您将用任何内容替换除最后一个“单词”之外的所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    相关资源
    最近更新 更多