我有一个带有一堆键值对的.env文件,如下所示:
SET SQLCMD="C:\Sql2008_SQLCMD\sqlcmd"
这是我尝试以编程方式更改的第三行。是一个动态生成的md5哈希值,每次运行该命令时,都需要用新的哈希值替换它。这就是我生成哈希的方式:
NAME=John Doe
CITY=Timbuctoo
CSS=<some value>
PORT=3000
我希望在使用sed时使用上面命令的输出作为替换文本。但无法弄清楚如何使其发挥作用。以下是我到目前为止的解决方案,远未完成:
$ date +%s | md5sum | cut -d' ' -f 1
应该用什么代替“替换”以确保原始值被$ date +%s | md5sum | cut -d' ' -f 1 | sed -i.bak 's/^\(CSS=\).*/replacement/' ~/nano/.env
返回的值替换?
答案 0 :(得分:3)
您只需使用
即可sed -i.bak "s/^\(CSS=\).*/$(date +%s | md5sum | cut -d' ' -f 1)/" ~/nano/.env
重要的是使用"
而不是'
,以便bash替换subshell命令$(...)
。
答案 1 :(得分:2)
您可以将xargs
与I
和占位符{}
一起使用来存储值stdin
并将其传递给sed
date +%s | md5sum | cut -d' ' -f 1 | xargs -I {} sed -i.bak 's/^\(CSS=\).*/CSS={}/' file
但我明智地避免引入另一个管道线并且会使用sed
的单独命令
newHash=$(date +%s | md5sum | cut -d' ' -f 1); sed -i.bak "s/^\(CSS=\).*/CSS=${newHash}/" file