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>를 유지하거나 추가 해야 합니다 .<?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 

물론 이것은 label 을 변경하지 않습니다 </REPLY>. 이는 다음을 수행합니다.

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

관련 정보