【问题标题】:Write variables to a file which contains the variabe name and value将变量写入包含变量名称和值的文件
【发布时间】:2018-03-13 09:13:00
【问题描述】:

我希望能够使用 bash 脚本读取和写入文件。我能够从文件中读取变量,但我不确定如何写入它。

文件data.txt 包含变量名称及其值,如下所示:

var1=2
var2=3

shell 脚本如下所示:

#!bin/bash

echo "Read"
var1=$(grep -Po "(?<=^var1=).*" data.txt)

echo "Do Something"
var2=${var1}

echo "Write"
# var2 should be saved in data.txt like this: var2=<Here is the Value>, e.g. var2=2

我可以使用grep 命令读取变量的具体值,该命令来自this 答案。但我不确定如何实现能够将变量值保存在正确位置的功能(请参阅 bash 脚本中的最后一条注释)。
data.txt 中的变量名是唯一的。

任何想法如何实现这一目标?

【问题讨论】:

  • echo "var2=$var2" &gt; data.txt ?这就是你要找的吗?
  • @Aserre 是的,但他的指令删除了data.txt 中的var1=2
  • @Aserre 没必要这么苛刻,我感谢你的努力,只是对发生的事情发表评论。 &gt;&gt; 附加该行而不是替换它。但无论如何我找到了一个解决方案,并会在一秒钟内发布它。感谢您的输入。 :)

标签: linux bash file


【解决方案1】:

我找到了sed 命令的解决方案:

echo "Write"
sed -i -e "s/$(grep -Po '(?<=^var2=).*' data.txt)/${var2}/g" data.txt

【讨论】:

    【解决方案2】:

    您可以使用sed 来完成这项工作。

    !/bin/bash
    
    echo "Read"
    var1=$(grep -Po "(?<=^var1=).*" data.txt)
    
    echo "Do Something"
    var2=${var1}
    
    echo "Write"
    sed -i "/var2/ s/.*/var2=${var2}/" data.txt # replace the line contains 'var2' with var2=2
    

    我假设你使用 GNU sed,对于 BSD sed,你需要为 -i 提供一个额外的后缀。

    【讨论】:

    • 对不起,我在发布我的答案后看到了你的答案。它们非常相似,但您的不会替换该值,而是将其附加到现有值。
    • 是的,确实如此。 "/var2/ s/.*/var2=${var2}/" 将包含“var2”的整行更改为“var2=2”,所以现在“var2=3”将变为“var2=2”,这正是您想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多