我有一个名为 info.log 的文件,其中包含以下行:
/home/jax/Main_X_1_A
X , 1 和 A 是有意义的,可以更改。但是“Main”和下划线保持不变。 是否可以使用实用程序根据 info.log 中的信息为shell变量分配值?
E.g。
MY_VERSION="?_?_?";
问号代表在这些位置找到的单个字符。 例如,如果 info.log 包含以下行:
/home/jax/Main_1_2_3
我们使用该数据初始化shell变量:
MY_VERSION=...
echo $MY_VERSION
输出结果为:
1_2_3
使用更好的示例更新问题:
info.log建立
MODULE=TEST
QUICK_BUILD_DIR=/usr/apps/Main_1_2_3
ANT_FILE=build.xml
FANCE=/usr/apps/test/Main_1_2_3
我希望能够取这三个数字(1,2和3):
QUICK_BUILD_DIR=/usr/apps/Main_1_2_3
并将它们分配给变量。
注意:1,2和3只是示例数字,可以更改。
答案 0 :(得分:2)
你能试试吗?
var="MY_VERSION=1_3_2"
version=$(echo $var | sed 's/.*MAIN_\(.*\)/\1/') #version will be 1_3_2
这使用bash和sed。
答案 1 :(得分:1)
$ MY_VERSION=$(awk -F/ '/Main_/ { sub(/Main_/, "", $NF); print $NF }' info.log)
$ echo "$MY_VERSION"
X_1_A
答案 2 :(得分:1)
您可以使用此awk命令:
cat file
/home/jill/Main_1_2_4
/home/jax/Main_1_2_3
/home/john/Main_X_1_A
awk -v u=jax -F '/' '$3==u{sub(/^Main_/, "", $4); print $4}' file
1_2_3
在这里,您可以将u
变量中的任何用户名传递给awk(因为jax
正在传递此处),并且将从该特定行中选择版本。
答案 3 :(得分:0)
无需外部工具。 Bash可以为你做字符串操作:
$ cat info.log
/home/jax/Main_X_1_A
$ read -r a < info.log
$ b="${a#*_}"
$ echo "$b"
X_1_A