![读取变量输入并用变量值替换模板文件](https://linux22.com/image/14555/%E8%AF%BB%E5%8F%96%E5%8F%98%E9%87%8F%E8%BE%93%E5%85%A5%E5%B9%B6%E7%94%A8%E5%8F%98%E9%87%8F%E5%80%BC%E6%9B%BF%E6%8D%A2%E6%A8%A1%E6%9D%BF%E6%96%87%E4%BB%B6.png)
在 Linux shell 脚本中,我正在读取一些变量值的输入。根据这些变量值,我需要使用输入更改模板文件。
例如。
我有一个包含内容的文件 hello.txt
--- 模板文件 hello.txt ---
Hello V_NAME
Welcome V_NAME to the team.
Thanks
从 shell 脚本中,我读取了 V_NAME 变量约翰
#!/bin/sh
....
....
read -p "Enter Candidates Name : " V_NAME
....
exit
然后基于 V_NAME,hello.txt现在应该是这样的.....
--- 模板文件 hello.txt ---
Hello **John** ,
Welcome **John** to the team.
Thanks
感谢您的帮助。
谢谢-纳维德-
答案1
该示例似乎是一封套用信函,因此预计不会有不寻常的字符需要处理。该sed
命令会很好,例如
#!/bin/bash
...
read -p "Enter Candidates Name : " V_NAME
read -p "Enter Candidates start date : " V_STARTDATE
sed "s=V_NAME=$V_NAME=g;s=V_STARTDATE=$V_STARTDATE=g" ../template/hello > hello.$V_NAME
...
如果考生姓名或开始日期包含符号,则此操作将会中断=
。这假设模板位于另一个目录中。
另一种方法是使用here
文档并将模板嵌入到脚本中
#!/bin/bash
...
read -p "Enter Candidates Name : " V_NAME
read -p "Enter Candidates start date : " V_STARTDATE
cat > hello.$V_NAME <<EOF
Hello $V_NAME
Welcome $V_NAME to the team. I see you will be starting on $V_STARTDATE.
Thanks
EOF
...
并让 shell 进行替换。