扩展sed中匹配的字符串

索迈亚·穆罕默德(Somayyah Mohammed)

是否可以在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$TIMESTAMPmy_file.txt并保存输出newfile您可以看到${PWD}它没有被替换,因为我忘记了将其添加到列表中。

在第二个注释的示例中,所有环境变量都被替换,不存在的变量被替换为空字符串。

您可以在模板中使用$VARNAME${VARNAME}语法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章