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

Bash处理文件:保留换行结构提取多行export变量值

Bash/sh 提取多行变量值到新文件(保留原文件不变)

核心需求

从格式为export 变量名="多行内容"的文件中,提取变量值(去掉前后双引号、完全保留换行结构),生成以变量名为名的新文件,且原文件内容完全不修改。

实现步骤

  1. 提取变量名(优化版)
    替代你原来的多行cut命令,用awk一步提取变量名更可靠:

    filename=myfile
    key=$(awk -F '[ =]' '/^export/ {print $2}' "$filename")
    

    这个命令会匹配文件中以export开头的行,按空格或等号分割,直接取第二个字段(即目标变量名)。

  2. 提取变量值并生成新文件
    以下两种方法任选,都能完美保留换行和原结构,且完全不触碰原文件:

    方法一:使用sed(适合简单场景)

    sed -n '/^export '"$key"'="/,/"$/ {
        /^export '"$key"'="/s///
        /"$/s///
        p
    }' "$filename" > "$key"
    
    • 逻辑:匹配从export 变量名="开头到"结尾的行范围
    • 对第一行删除开头的export 变量名=",对最后一行删除结尾的"
    • 将处理后的内容输出到名为$key的新文件

    方法二:使用awk(更灵活,适合复杂内容)

    awk -v key="$key" '
        BEGIN { in_val=0 }
        /^export '"$key"'="/ {
            sub(/^export '"$key"'="/, "")
            in_val=1
        }
        in_val {
            if (/\"$/) {
                sub(/"$/, "")
                print
                exit
            }
            print
        }
    ' "$filename" > "$key"
    
    • 逻辑:先标记进入变量值区域的状态,遇到结尾的"时删除该符号并退出处理
    • 全程只读取原文件内容,输出到新文件,原文件无任何修改

关键说明

所有操作都是读原文件→处理内容→输出到新文件的流程,绝对不会修改原文件,完全符合你“不修改原文件”的需求;两种方法都能正确处理包含换行、特殊字符(如证书密钥、配置项)的内容,完美保留原格式。

内容的提问来源于stack exchange,提问作者Amin Ba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:32:55