【问题标题】:How to extract particular groups in a shell script?如何在 shell 脚本中提取特定组?
【发布时间】:2021-01-29 10:04:22
【问题描述】:

我正在尝试从 git 标签信息中提取项目名称和版本。示例标记如下所示:atlantis/v12。我们需要将第一组分开作为项目名称,即。 atlantis 和第二个版本,即。 v12.

尝试执行此操作 git describe --tag | grep -P (.*).*(v[0-9]*)| awk {1} 会导致 zsh: unknown file attribute: v,并使用 bash syntax error near unexpected token ('`。我需要帮助了解我可能做错了什么?

【问题讨论】:

    标签: git shell grep zsh


    【解决方案1】:

    你忘了在 grep 中引用 -P 的参数,zsh 认为它有责任尝试对其进行文件名扩展。你必须把它写成

    grep -P '(.*).*(v[0-9]*)'
    

    除此之外,您的正则表达式说:匹配任何内容的零个或多个字符,然后是任何内容的零个或多个字符,然后是零个或多个由v 组成的字符串,并添加了零个或多个数字。因此,您的正则表达式将匹配输入中的任何行。

    【讨论】:

    • 这仍然被认为是错误的用法,它显示了 grep 的所有可用选项
    • 嗯,它解释了未知文件属性。正则表达式本身也没有多大意义,因为它会简单地匹配每一行。但这会引出一个新问题,如果你自己搞不明白的话。
    • 是否有可能用sed 做到这一点?
    • @AdityaKumarGupta:在您的问题中,您特别询问了您遇到的错误来自哪里。虽然我不明白你为什么不想坚持使用 grep 并且只是让模式正确,但无论如何我都会在 new 问题中问这个问题而不是在评论中讨论这些问题。在任何情况下,您都需要描述输入字符串的整行,而不仅仅是要过滤掉的模式的外观。
    【解决方案2】:

    因为您已经在使用 awk:

    git describe --tag | awk -F\/ '{ print "Project: "$1;print "Version: "$2 }'
    

    将字段分隔为“/”,然后将第一个字段打印为项目,将第二个字段打印为版本。

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 2020-09-06
      • 2012-09-17
      • 1970-01-01
      • 2019-10-15
      • 2020-06-18
      • 2016-06-04
      • 1970-01-01
      相关资源
      最近更新 更多