Unix脚本删除XML文件最后一行的内容

时间:2018-03-09 05:39:27

标签: shell unix

在我们的主脚本中,如下所示调用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

}

2 个答案:

答案 0 :(得分:0)

您可以使用sedawk

使用以下替换命令之一
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文件最后一行的内容,我添加的新行将被删除。

问题解决了。