【问题标题】:How to get first match with sed?如何获得与 sed 的第一场比赛?
【发布时间】:2017-07-22 20:44:29
【问题描述】:

我厌倦了这个 sed :D 所以我有一个小文件:

version = "1.1"
group= "com.centurion.eye"
archivesBaseName = "eye"

impmet {
    version = "4.1614"
    runDir = "eclipse"
}

这是我的 sed 命令:

sed -n -e '/version/ s/.* = *//p' "build.gradle"

而且我只需要获得 1.1 版。所以当我执行这个命令时,输出是:

"1.3"
"4.1614"

但想要的是:

"1.3"

我怎样才能做到这一点?谢谢!

【问题讨论】:

  • 您有机会检查我的解决方案吗?

标签: linux shell unix sed


【解决方案1】:

使用 GNU sed,您还可以在地址范围内使用 0 以仅在第一个匹配项上应用替换:

sed -n -e '0,/version/s/.* = *//p' build.gradle

【讨论】:

    【解决方案2】:

    匹配第一个后退出。

    sed -n -e '/version/ {s/.* = *//p;q}' build.gradle
    

    【讨论】:

      【解决方案3】:

      将您的命令输出通过管道传输到 head -1 以仅获取第一个条目。

      sed -n -e '/version/ s/.* = *//p' "build.gradle" | head -1
      

      样品运行

      [ /c]$ cat build.gradle
      version = "1.1"
      group= "com.centurion.eye"
      archivesBaseName = "eye"
      
      impmet {
          version = "4.1614"
              runDir = "eclipse"
              }
      [ /c]$ sed -n -e '/version/ s/.* = *//p' build.gradle | head -1
      "1.1"
      

      【讨论】:

      • 谢谢,我试试看!
      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2012-03-27
      • 1970-01-01
      • 2019-08-26
      相关资源
      最近更新 更多