Linux环境变量含换行+sed:替换文件内容时保留换行格式
解决方法:保留换行并替换文件内容
首先得搞清楚为啥echo $TWOLINES会变成一行——这是shell的默认行为:当你用$(mycommand)捕获命令输出时,shell会把输出里的换行符替换成空格,所以变量里的内容其实是用空格分隔的一行文本。要解决替换时保留两行的问题,我们分两步来:
1. 正确保存命令输出的换行到环境变量
如果直接用export TWOLINES=$(mycommand)会丢失换行,所以换一种方式捕获输出,完整保留换行:
# 用read命令捕获所有输出(包括换行),以空字符作为结束标记 IFS= read -r -d '' TWOLINES < <(mycommand && printf '\0') export TWOLINES
这时你执行echo "$TWOLINES"(一定要加双引号!)就能看到两行内容了——双引号能防止shell把变量里的换行再转换成空格。
2. 替换文件中的replaceme字符串
接下来要把变量里的两行内容替换到文件里,这里推荐两种可靠的方法:
方法一:使用sed命令
sed需要先转义变量里的特殊字符(比如/和&),避免替换出错:
# 先把变量内容转义,再替换文件里的replaceme sed -i "s/replaceme/$(printf '%s' "$TWOLINES" | sed 's/[\/&]/\\&/g')/" your_target_file.txt
方法二:使用perl命令(更简单,无需手动转义)
perl会自动处理变量里的特殊字符和换行,写法更简洁:
perl -i -pe 's/replaceme/$ENV{TWOLINES}/' your_target_file.txt
验证结果
替换完成后打开文件,replaceme应该已经被替换成两行的somedata=this和somedata=that了。
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

