Bash处理文件:保留换行结构提取多行export变量值
Bash/sh 提取多行变量值到新文件(保留原文件不变)
核心需求
从格式为export 变量名="多行内容"的文件中,提取变量值(去掉前后双引号、完全保留换行结构),生成以变量名为名的新文件,且原文件内容完全不修改。
实现步骤
提取变量名(优化版)
替代你原来的多行cut命令,用awk一步提取变量名更可靠:filename=myfile key=$(awk -F '[ =]' '/^export/ {print $2}' "$filename")这个命令会匹配文件中以
export开头的行,按空格或等号分割,直接取第二个字段(即目标变量名)。提取变量值并生成新文件
以下两种方法任选,都能完美保留换行和原结构,且完全不触碰原文件:方法一:使用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
相关产品推荐
相关产品推荐

