我有以下文件
Build-value
123-67
145-69
我想要一个bash脚本来获取特定内部版本号的值。例如,我希望它获取内部版本号145的值(值为69)
我怎样才能在bash中这样做? bash脚本需要能够获取任何指定内部版本号的值。
答案 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-behind。 grep
-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
变量值后的数字。