bash获取第一个单词的最后一行
我得到了一个bash脚本,并开始编写变更日志来跟踪变更 我在脚本中添加了一个函数,该函数响应bash获取第一个单词的最后一行,bash,changelog,Bash,Changelog,我得到了一个bash脚本,并开始编写变更日志来跟踪变更 我在脚本中添加了一个函数,该函数响应“脚本版本-->” 但我必须手动编辑它 因此,我需要一个函数来获取第一个单词直到最后一行的空格,并将其存储为$CURRENTVERSION 更改日志语法为: v-0.3.2 Added x, y. v-0.3.2.1 Fixed y. v-0.4 Added z. 简单地说,我需要使用awk将v-0.4存储为$CURRENTVERSION: awk '{w=$1} END{print w}' fil
“脚本版本-->”
但我必须手动编辑它
因此,我需要一个函数来获取第一个单词直到最后一行的空格,并将其存储为$CURRENTVERSION
更改日志语法为:
v-0.3.2 Added x, y.
v-0.3.2.1 Fixed y.
v-0.4 Added z.
简单地说,我需要使用awk将v-0.4
存储为$CURRENTVERSION
:
awk '{w=$1} END{print w}' file
或使用sed:
sed -n '$s/^\([^ ]*\).*$/\1/p' file
如果您不喜欢awk或sed,可以这样做:
tail -n1 file | cut -d' ' -f1
但实际上,awk和sed是更好的工作工具…bash:
read CURRENTVERSION rest < <(tail -1 changelog)
read CURRENTVERSION restawk'END{print}'changelog.txt
),因为我需要保持$1为空,然后currentver[0]就是我需要的;这是一个好方法吗?是的,awk在这里要简单得多。使用-r
和sed
不是更好吗?它不需要转义括号。而且awk
将处理整个文件,不是吗?如果更改日志太长怎么办!只是假设性的询问。我更喜欢使用sed
或tail
和grep
我认为您需要衡量性能,以确定是否正在处理整个文件以达到最终目的。从某种意义上说,所有面向行的程序都需要从文件的开头读取到结尾;如果您能确定这样做不会错过程序所需的任何较早的行,则可以使用二进制搜索加上seek()
来稍后启动。是的,我会使用awk'END{print w}'changelog.txt | cut-d'-f1
这是我唯一一次不使用awk或sed进行此操作,比如说,如果我在一个没有安装它们的嵌入式系统上,这也是一个有效的选择!