Linux 从文件中删除出现的句子并添加添加开始和结束

Linux 从文件中删除出现的句子并添加添加开始和结束

我有一个脚本卷曲向 SMS 网关发送 SMS 并获取 xml 作为响应的命令。每个响应都附加到一个文件中以供将来使用xslt过程创建 csv 的过程。

单个响应如下:

<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY><PARAMETER>OK</PARAMETER><LOGIN>SUCCESSFULL</LOGIN><PUSHAPI>ACTIVE</PUSHAPI><STAKEHOLDERID>OK</STAKEHOLDERID><PERMITTED>OK</PERMITTED><SMSINFO><MSISDN>xxxxxxxxxxxxx</MSISDN><SMSTEXT>Test+SMS+Check</SMSTEXT><CSMSID>113426778</CSMSID><REFERENCEID>2020050321383271896124009</REFERENCEID></SMSINFO></REPLY>

现在,每次脚本运行时,它都会附加相同的响应以及具有重复<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY>和重复值的单独值</REPLY>

所以第二次执行后文件将是:

<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY><PARAMETER>OK</PARAMETER><LOGIN>SUCCESSFULL</LOGIN><PUSHAPI>ACTIVE</PUSHAPI><STAKEHOLDERID>OK</STAKEHOLDERID><PERMITTED>OK</PERMITTED><SMSINFO><MSISDN>xxxxxxxxxxxxx</MSISDN><SMSTEXT>Test+SMS+Check</SMSTEXT><CSMSID>113426778</CSMSID><REFERENCEID>2020050321383271896124009</REFERENCEID></SMSINFO></REPLY><?xml version='1.0' encoding='ISO-8859-1' ?><REPLY><PARAMETER>OK</PARAMETER><LOGIN>SUCCESSFULL</LOGIN><PUSHAPI>ACTIVE</PUSHAPI><STAKEHOLDERID>OK</STAKEHOLDERID><PERMITTED>OK</PERMITTED><SMSINFO><MSISDN>xxxxxxxxxxxxx</MSISDN><SMSTEXT>Test+SMS+Check</SMSTEXT><CSMSID>113426778</CSMSID><REFERENCEID>2020050321383271896124009</REFERENCEID></SMSINFO></REPLY>

其中有 2<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY></REPLY>.

xslt过程无法处理多个<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY></REPLY>

因此,我需要删除所有内容<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY>,并在最终处理时在文件开头和文件末尾</REPLY>保留或添加 a 。<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY></REPLY>

所以我的文件在处理时xslt过程第二次运行后应该是这样的:

<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY><PARAMETER>OK</PARAMETER><LOGIN>SUCCESSFULL</LOGIN><PUSHAPI>ACTIVE</PUSHAPI><STAKEHOLDERID>OK</STAKEHOLDERID><PERMITTED>OK</PERMITTED><SMSINFO><MSISDN>xxxxxxxxxxxxx</MSISDN><SMSTEXT>Test+SMS+Check</SMSTEXT><CSMSID>113426778</CSMSID><REFERENCEID>2020050321383271896124009</REFERENCEID></SMSINFO><PARAMETER>OK</PARAMETER><LOGIN>SUCCESSFULL</LOGIN><PUSHAPI>ACTIVE</PUSHAPI><STAKEHOLDERID>OK</STAKEHOLDERID><PERMITTED>OK</PERMITTED><SMSINFO><MSISDN>xxxxxxxxxxxxx</MSISDN><SMSTEXT>Test+SMS+Check</SMSTEXT><CSMSID>113426778</CSMSID><REFERENCEID>2020050321383271896124009</REFERENCEID></SMSINFO></REPLY>

那么如何删除<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY>文件中除第一个之外的所有内容以及删除</REPLY>除最后一个之外的所有内容。

或者有没有其他方法来创建 csv 或 xlx 进行记录。

答案1

使用 GNU sed,它的启动将非常简单

sed 's/...//g2' file

在 GNU sed 中,要求general( g) 替换后跟一个数字意味着所有重复开始与号码将被替换。

sed 's@<?xml version='1.0' encoding='ISO-8859-1' ?><REPLY>@@g2' file 

当然,这不会改变标签</REPLY>,这会:

sed 's@</REPLY>@@g' file; echo '</REPLY>' >> file

相关内容