【问题标题】:Assign a variable the value of a string in a file为变量分配文件中字符串的值
【发布时间】:2013-08-30 14:28:39
【问题描述】:

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

/home/jax/Main_X_1_A

X、1 和 A 是有意义的并且可以改变。但是 "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 只是示例数字,它们可以更改。

【问题讨论】:

  • 我认为您需要使用更好的语料库和更多所需输出的示例来更新您的问题。从下面的 cmets 中,您的问题似乎缺少一些要求和边缘情况。

标签: shell sed awk


【解决方案1】:

你可以试试这个吗?

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

这使用 bash 和 sed。

【讨论】:

    【解决方案2】:

    GNU Awk 解决方案

    $ MY_VERSION=$(awk -F/ '/Main_/ { sub(/Main_/, "", $NF); print $NF }' info.log)
    $ echo "$MY_VERSION"
    X_1_A
    

    【讨论】:

    • 这行得通 - 有没有扩展它?在我的 info.log 中,我有多个绝对路径,如下所示:/home/jax/Main_1_2_3, /home/jane/Main_1_2_5 如果您遵循,我只想使用一个绝对路径的值?您还可以扩展它的工作原理吗?
    • 如果有多行,你如何决定使用哪一个?
    • 我知道我想要使用的绝对路径,直到我试图从中剥离值的最后一部分。例如。 /home/jax/Main_1_2_3 /home/jill/Main_1_2_4 我希望我的值从 /home/jax/ 中剥离出来,所以回显会产生 1_2_3。
    • @mr_sugartaste 如果有像/home/jax/Main_1_2_4这样的另一行呢?
    【解决方案3】:

    你可以使用这个 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 正在此处传递)并且将从该特定行中选择版本。

    【讨论】:

      【解决方案4】:

      无需外部实用程序。 Bash 可以为你做字符串操作:

      $ cat info.log 
      /home/jax/Main_X_1_A
      $ read -r a < info.log
      $ b="${a#*_}"
      $ echo "$b"
      X_1_A
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多