2

我有一个名为info.log的文件,其中包含以下行:

/home/jax/Main_X_1_A

X , 1A是有意义的,它们可以改变。但是“Main”和下划线保持不变。是否可以使用实用程序根据info.log中的信息为 shell 变量分配一个值?

例如

MY_VERSION="?_?_?"; 

问号代表在这些位置找到的单个字符。例如,如果info.log包含此行:

/home/jax/Main_1_2_3

我们使用这些数据来初始化一个 shell 变量:

MY_VERSION=...
echo $MY_VERSION

输出将是:

1_2_3

用更好的例子更新问题:

信息日志

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 只是示例数字,它们可以更改。

4

4 回答 4

2

你能试试这个吗?

var="MY_VERSION=1_3_2"
version=$(echo $var | sed 's/.*MAIN_\(.*\)/\1/') #version will be 1_3_2

这使用 bash 和 sed。

于 2013-08-30T14:35:17.997 回答
1

GNU awk 解决方案

$ MY_VERSION=$(awk -F/ '/Main_/ { sub(/Main_/, "", $NF); print $NF }' info.log)
$ echo "$MY_VERSION"
X_1_A
于 2013-08-30T14:43:25.367 回答
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在此处传递的那样),并且将从该特定行中选择版本。

于 2013-08-30T15:15:05.573 回答
0

无需外部实用程序。Bash 可以为您进行字符串操作:

$ cat info.log 
/home/jax/Main_X_1_A
$ read -r a < info.log
$ b="${a#*_}"
$ echo "$b"
X_1_A
于 2013-08-30T18:09:04.923 回答