我有一个程序(特别是)以、和均为数字的node --version
形式输出文本。我想以可移植的方式从该字符串中提取主要版本,该方式适用于 Linux 和 OS X。我目前正在使用v<major>.<minor>.<patch>
<major>
<minor>
<patch>
grep -oP "(?<=v)(\d+)(?=.\d+.\d+)"
但看起来这在 OS X 上不起作用,因为它使用不同的标志。有没有一种方法可以在任一系统上执行此操作?
答案1
在 bash 中,您可以使用:
IFS='v.' read -r throwaway major minor patch < <(node --version)
该变量throwaway
在初始 之前获得空白v
。没有可用于测试的 OS X 机器,但这应该是很好的 bash 脚本。
答案2
受到 mikeserv 评论的启发,我现在使用以下命令执行此操作
node --version | cut -d. -f1 | cut -c2-
这使用带有.
分隔符的 cut 来仅提取v<major>
字符串。然后它再次使用 cut 来获取以第二个开头的所有字符,从而删除v
.
这仅使用 coreutils(除了node
),使其尽可能可移植。