是否可以在sed命令中扩展匹配的字符串?我想用文件中的值替换变量名,这是我目前的脚本:
#!/bin/bash
echo "Running the build script..."
VAR1="2005648"
VAR2="7445aa"
SERVER_NAME=$(hostname)
TIMESTAMP=$(date +%m-%d-%Y)
sed -i "s/{[A-Z_][A-Z_]*}/$&/g" my_file.txt #variable names in the file are written between { }
这是my_file.txt的快照:
Building finished at {TIMESTAMP}
{VAR1}:{VAR2}
On: {SERVER_NAME}
current working directory: {PWD}
但这是行不通的。与其用变量的值代替变量名,它在花括号前插入一个美元符号。我该如何解决?
您可以envsubst
用来替换环境变量,否则您将需要一堆sed
命令来替换所有内容。
将模板文件更改为:
Building finished at ${TIMESTAMP}
${VAR1}:${VAR2}
On: ${SERVER_NAME}
current working directory: ${PWD}
和脚本来:
#!/bin/bash
echo "Running the build script..."
export VAR1="2005648"
export VAR2="7445aa"
export SERVER_NAME=$(hostname)
export TIMESTAMP=$(date +%m-%d-%Y)
# only replace the defined variables
envsubst '$VAR1 $VAR2 $SERVER_NAME $TIMESTAMP' < my_file.txt > newfile
# replace all environment variables ($USER, $HOME, $HOSTNAME, etc.)
#envsubst < my_file.txt > newfile.txt > newfile
该脚本将替换环境变量$VAR1
,$VAR2
,$SERVER_NAME
和$TIMESTAMP
中my_file.txt
并保存输出newfile
。您可以看到${PWD}
它没有被替换,因为我忘记了将其添加到列表中。
在第二个注释的示例中,所有环境变量都被替换,不存在的变量被替换为空字符串。
您可以在模板中使用$VARNAME
或${VARNAME}
语法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句