sed 引用变量不成功,表达式问题导致出现如下等错误:
sed:-e 表达式 #1,字符 12:命令后含有多余的字符
sed:-e 表达式 #1,字符 29:未终止的“s”命令
替换的目标变量有多段文字,由于sed命令中的转义符或者引号使用不对,增加的文字中第二行的字母e被sed认为是循环执行命令,无法被当作整段文字直接插入导致出错。
问题出现的环境背景及自己尝试过哪些方法
使用shell sed语句中的s命令或者a命令,试了多种引号和转义都没有试出来。
使用sed的r命令读取临时文件方式可行,但没有使用变量方便:
#!/bin/bash
sed -n '/profile/,/EOF-profile/p' src.txt| sed -n 2,8p > /tmp/tmp1
sed -i '/<configuration>/r /tmp/tmp1' dst.txt
相关代码
head -10 src.txt
#profile
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#EOF-profile
cat dst.txt
<!-- Put specific property overrides in this file. -->
<configuration>
#---->增加src文件中的部分内容<-----
</configuration>
cat ap5.sh
#!/bin/bash
dst1="`sed -n '/profile/,/EOF-profile/p' src.txt| sed -n 2,4p`" #读取src.txt需要增加的部分配置内容
sed "/<configuration>/a "${dst1}"" dst.txt #在<configuration>下一行插入需要的配置语句,但是dst1中第二行的e被sed认为是循环执行,无法被当作整段文字直接插入导致出错。
错误信息:
sed "/<configuration>/a "${dst1}"" dst.txt
sed:无法读取 export:没有那个文件或目录
sed:无法读取 JAVA_HOME=/opt/module/jdk1.8.0_144:没有那个文件或目录
sed:无法读取 export:没有那个文件或目录
sed:无法读取 PATH=$PATH:$JAVA_HOME/bin:没有那个文件或目录
<!-- Put specific property overrides in this file. -->
<configuration>
#JAVA_HOME
</configuration>
问题请教:如何修改下边的sed命令转义或者使用其它命令方式,完成目标内容增加?求指点,谢谢!
sed "/<configuration>/a "${dst1}"" dst.txt
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…