如何在bash中获取特定数字的值

时间:2016-08-19 02:09:26

标签: bash

我有以下文件

Build-value 
123-67
145-69

我想要一个bash脚本来获取特定内部版本号的值。例如,我希望它获取内部版本号145的值(值为69)

我怎样才能在bash中这样做? bash脚本需要能够获取任何指定内部版本号的值。

5 个答案:

答案 0 :(得分:3)

使用bash内置正则表达式。

onMessageReceived的内容:

build_value.sh

#!/bin/bash if [[ ${#} -ne 2 ]]; then echo "Usage: ${0} <build file> <build number>" exit 1 fi build="${2}" # This is the build number file="${1}" # This is the build file contents=$(<"${file}") if [[ " ${contents//$'\n'/ }" =~ \ ${build}-([0-9]+) ]]; then echo "${BASH_REMATCH[1]}"; # this will echo the build value fi 的内容:

builds.txt

用法:

123-67
145-69

输出:

$ ./build_value.sh builds.txt 145

注意:

  • 我假设内部版本号和值的格式都在一行中(如问题中所述)。(参见编辑部分)。
  • 这将匹配任何事件,在本例中为69 ,因此我假设构建号是唯一的,否则只有第一个匹配。

修改

  • 现在有新线支持(或者在这种情况下,替换)。

答案 1 :(得分:3)

这个班轮怎么样 -

grep -w "^145" file.txt | awk -F "-" '{print $2}'

将145更改为您想要找到的相应值。

最好只使用awk -

awk -F "-" '/^145/ {print $2}' file.txt

答案 2 :(得分:2)

您可以使用正则表达式look-behindgrep -P已激活(get_value() { build=${1:?You should provide a build number} grep -Po "(?<=$build-)[0-9]+" builds.txt } )的示例:

$ cat builds.txt 
123-67
145-69
$ get_value 145
69

实施例

{
  "errorCode": "PARTNER_AUTHENTICATION_FAILED",
  "message": "The specified Integrator Key was not found or is disabled. An Integrator key was not specified."
}

答案 3 :(得分:2)

使用awk

awk -F- -v build=145 '$1 == build {print $2}' file.txt

答案 4 :(得分:2)

您还可以使用sed

build=145; sed -n "s/^${build}-\([0-9]*\)/\1/p" file

sed替换提取-匹配build变量值后的数字。