【问题标题】:bash get first word last linebash 获取最后一行的第一个单词
【发布时间】:2013-11-25 00:12:50
【问题描述】:

我得到了一个 bash 脚本,并开始编写更新日志来跟踪更改。

我在脚本中添加了一个回显"Script version --> " 的函数 但我必须手动编辑它。

所以我需要一个函数来获取第一个单词直到最后一行的空格并将其存储为$CURRENTVERSION

变更日志语法为:

v-0.3.2 Added x, y.

v-0.3.2.1 Fixed y.

v-0.4 Added z.

简而言之,我需要将v-0.4 存储为$CURRENTVERSION

【问题讨论】:

    标签: bash changelog


    【解决方案1】:
    CURRENTVERSION=$( perl -anle 'print $F[0] if eof' changelog )
    echo $CURRENTVERSION 
    v-0.4
    

    【讨论】:

      【解决方案2】:

      重击:

      read CURRENTVERSION rest < <(tail -1 changelog)
      

      【讨论】:

      • 坦克这也是一个有效的选择!
      【解决方案3】:

      如果你不喜欢 awk 或 sed,你可以这样做:

      tail -n1 file | cut -d' ' -f1
      

      但实际上,awk 和 sed 是更好的工作工具...

      【讨论】:

      • 是的,我想我会使用awk 'END{print w}' changelog.txt | cut -d' ' -f1
      • 唯一一次我不会为此使用 awk 或 sed,例如,如果我在未安装它们的嵌入式系统上。
      【解决方案4】:

      使用 awk:

      awk '{w=$1} END{print w}' file
      

      或者使用 sed:

      sed -n '$s/^\([^ ]*\).*$/\1/p' file
      

      【讨论】:

      • LOL sed 太复杂了,有没有 wiki ? (我不太喜欢使用我不知道/理解得很好的东西)坦克到你告诉我的 awk 示例我会使用这个:currentver=(awk 'END{print}' changelog.txt) 因为我需要保持 $1 为空,并且那么 currentver[0] 将是我需要的;这是个好方法吗?
      • 是的 awk 在这里要简单得多。
      • -rsed 会不会更好?它不需要转义括号。
      • awk 也会处理整个文件,不是吗?如果 change_log 太长怎么办!只是假设的查询。我会更喜欢 sedtailgrep
      • 我认为您需要测量性能以确定是否正在处理整个文件以达到结尾。从某种意义上说,所有面向行的程序都需要从文件的开头读取到结尾;二进制搜索结合seek() 可用于稍后开始,如果您确定这样做不会错过程序所需的任何早期行。
      猜你喜欢
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2021-04-29
      相关资源
      最近更新 更多