在我们的主脚本中,如下所示调用replace()函数。
此处在“sed命令”中替换邮件字符串后,文件被移动“mv $ tmpfile $ file;”两者都是成功的,输出控制台中的回声“ - 文件$文件已成功编辑!”
一切都很好。但是,
问题在于替换的xml文件中删除了最后一行。例如,如果xml文件的最后一行是标记,则删除此行。
有人帮我解释为什么删除最后一行xml文件?
#replace wrapper function
f_replace(){
file = $ 1
#-i在比较期间忽略大小写区别。
COUNT = $(egrep -i $ SEARCH_STRING $ file | wc -l)
如果[$ COUNT -ne 0];然后
#found - 将其添加到列表
echo“$ COUNT time(s)$ file”| tee -a $ FILE_LIST
#tmpfile erstellen
tmpfile =“$ file。”date +%Y%m%d
“_”date +%H%M%S
;
> $ tmpfile;
sed -e%[dD] [eE] [vV] @ [dD] [oO] [mM] [aA] [iI] [nN]。[cC] [oO] [mM]%检验@ domain.com%g'$ file>> $ tmpfile;
rc = $?;
[“$ rc”!=“0”]&& echo“ERROR:无法编辑文件$ file并将其写入$ tmpfile!” | tee -a $ FILE_LIST&&返回;
mv $ tmpfile $ file;
rc = $?;
[“$ rc”!=“0”]&& echo“ERROR:无法将tmp文件$ tmpfile移动到$ file!” | tee -a $ FILE_LIST&&返回;
echo“ - 文件$文件已成功编辑!” | tee -a $ FILE_LIST
fi
}
答案 0 :(得分:0)
您可以使用sed
或awk
:
sed 's/dev@domain.com/test@domain.com/gI' $file >>$tmpfile
示例:
$ echo dEv@domain.com Dev@domain.com | sed 's/dev@domain.com/test@domain.com/gI'
test@domain.com test@domain.com
或
$ awk 'BEGIN{IGNORECASE=1}/dev@domain.com/{gsub(/dev@domain.com/,"test@domain.com")}1'
示例:
$ echo dEv@domain.com dEv@domain.com | awk 'BEGIN{IGNORECASE=1}/dev@domain.com/{gsub(/dev@domain.com/,"test@domain.com")}1'
test@domain.com test@domain.com
你能解释一下这行做什么吗 >$tmpfile;
?
答案 1 :(得分:0)
解决方案:
顺便说一下,在处理sed命令之前,通过在$ file中添加一个新行来解决它。由于某些原因(可能是bug)sed删除了xml文件最后一行的内容,我添加的新行将被删除。
问题解决了。