【问题标题】:How to extract and chop version string from file in bash如何从bash中的文件中提取和剪切版本字符串
【发布时间】:2009-06-10 10:18:31
【问题描述】:

我有一个包含版本号的简单文本文件 ./version。不幸的是,有时文件中的版本号后跟空格和换行符,如

1.1.3[space][space][newline]
[newline]
[newline]

在没有尾随空格和换行符的情况下,将版本号提取到 bash 变量中的最佳、最简单和最短的方法是什么?我试过了

var=`cat ./version | tr -d ' '`

这适用于空格,但在附加 tr -d '\n' 时它不起作用。

谢谢, 克里斯

【问题讨论】:

    标签: bash


    【解决方案1】:
    $ echo -e "1.1.1  \n\n" > ./version
    $ read var < ./version
    $ echo -n "$var" | od -a
    0000000   1   .   1   .   1
    0000005
    

    【讨论】:

      【解决方案2】:

      纯 Bash,没有其他进程:

      echo -e "1.2.3  \n\n" > .version
      
      version=$(<.version)
      version=${version// /}
      
      echo "'$version'"
      

      结果:'1.2.3'

      【讨论】:

        【解决方案3】:

        我仍然不知道为什么,但是在删除并重新创建版本文件后,它起作用了:

        var=`cat ./version | tr -d ' ' | tr -d '\n'`
        

        我很困惑...在创建文本文件时你能做些什么不同的事情。不过,现在可以了。

        【讨论】:

        • 您可以通过将空格和换行符放在方括号内来调用 tr 来做到这一点: var=$(cat ./version | tr -d '[ \n]') – Dennis Williamson 0秒前 [删除此评论]
        【解决方案4】:

        我喜欢fgm's answer 的纯 版本。

        我提供了这个单行的 命令来删除其他字符(如果有的话):

        perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' 
        

        提取的版本号被修剪/去除(没有换行符或回车符号):

        $> V=$( bash --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' )
        $> echo "The bash version is '$V'"
        The bash version is '4.2.45'
        

        我在my other answer 中提供了更多解释并给出了其他更复杂(但仍然很短)的单行 命令。

        【讨论】:

          猜你喜欢
          • 2011-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多