You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用awk自动替换文本中{{env VAR}}为对应环境变量?

自动替换文本中的环境变量模板解决方案

以下是符合需求的POSIX shell脚本,基于FreeBSD awk实现,无需传入参数,自动识别{{env VARNAME}}格式的模板并替换为对应环境变量的值:

#!/bin/sh

awk '
function escape_replacement(s) {
    # 转义替换内容中的&符号,避免gsub将其解析为匹配引用
    gsub(/&/, "\\\\&", s)
    return s
}
{
    # 循环匹配并替换当前行中所有{{env VARNAME}}模板
    while (match($0, /{{env ([A-Za-z0-9_]+)}}/, parts)) {
        var_name = parts[1]
        # 获取环境变量值,不存在则用空字符串
        replacement = ENVIRON[var_name] ? escape_replacement(ENVIRON[var_name]) : ""
        # 替换匹配的模板片段
        $0 = substr($0, 1, RSTART - 1) replacement substr($0, RSTART + RLENGTH)
    }
    print
}
'

工作原理说明

  1. 正则匹配:通过match函数结合正则/{{env ([A-Za-z0-9_]+)}}/捕获模板中的环境变量名,捕获组的结果存储在parts数组中(parts[1]为变量名)。
  2. 环境变量获取:利用awk内置的ENVIRON数组直接读取系统环境变量,无需额外传递参数。
  3. 特殊字符处理:escape_replacement函数转义替换值中的&符号,防止gsub将其误解析为匹配的模板内容引用。
  4. 全量替换:通过循环处理每一行中的所有匹配项,确保单行内多个模板都能被替换。

使用方式

  • 直接运行脚本,输入文本后按Ctrl+D结束输入:
    ./env-template.sh
    
  • 通过管道传递文本文件内容:
    cat your-input-file.txt | ./env-template.sh
    

测试示例

输入:

This is a basic templating system that can replace environment variables in regular text files.
For example the DISPLAY in this system is {{env DISPLAY}} and the path is {{env PATH}}.

输出(根据当前环境变量值):

This is a basic templating system that can replace environment variables in regular text files.
For example the DISPLAY in this system is :0.0 and the path is /bin:/usr/bin:/usr/local/bin.

内容的提问来源于stack exchange,提问作者M.E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:12:33