【问题标题】:find and assign a string to a variable in bash在bash中查找字符串并将其分配给变量
【发布时间】:2018-05-28 22:21:39
【问题描述】:

如何使用 bash 从文件中查找字符串。

我有一个文件“version.txt”,文件有内容

version = "0.0.1-SNAPSHOT"

需要一个 bash 命令来动态提取版本键的值。

【问题讨论】:

  • 给新手的建议:如果一个答案解决了您的问题,请点击旁边的大复选标记 (✓) 接受它,也可以选择投票(投票至少需要 15 个声望)点)。如果您发现其他答案有帮助,请给他们投票。接受和投票有助于未来的读者。请看【相关帮助中心文章】[1] [1]:stackoverflow.com/help/someone-answers

标签: linux bash sed grep


【解决方案1】:
version=$(grep ^version version.txt | cut -d'"' -f2)

【讨论】:

    【解决方案2】:

    您可以使用以下命令之一并将结果分配给变量:

    输入:

    $ cat version.txt 
    abc
    version = "0.0.1-SNAPSHOT"
    123
    

    grep:

    $ grep -oP '(?<=^version\s=\s")[^"]*' version.txt                                                                                
    0.0.1-SNAPSHOT
    

    perl:

    $ perl -ne 'if(/^version/){s/^version\s*=\s*|"//g; print}' version.txt                                                           
    0.0.1-SNAPSHOT
    

    还有很多其他方法可以达到您的结果 (sed,awk,...)

    说明:

    1) 你在perl 模式下使用grep 并使用lookbehind 断言,在这种情况下,我假设你的 equal 总是被 1 并且只有 1 个空格包围

    2)perl的方式更灵活(等号周围可以有0,1个或更多的空格),这里的原则是先识别出version开头的行,然后去掉@987654330 @ 和双引号,然后再打印结果。

    【讨论】:

      【解决方案3】:
      var=$(awk '/version/ {print $3}' file.txt)
      

      /EXPR/

      var=$(awk '/version/ {print $(NF)}' file.txt)
      

      awk 中的 NF 是当前行的字段数,在本例中为 3。

      【讨论】:

        【解决方案4】:

        awk -F '=' '{print $2}' version.txt

        【讨论】:

          猜你喜欢
          • 2015-04-11
          • 1970-01-01
          • 2013-05-09
          • 1970-01-01
          • 2021-12-24
          • 2018-07-24
          • 2012-08-04
          • 2011-09-28
          • 1970-01-01
          相关资源
          最近更新 更多