我有一个脚本卷曲向 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