我收到了一个xml文件,该文件已由其他人从数据库中提取。问题是它包含一些字符串,这些字符串会以正确的方式创建读取xml的问题。这是它的一小部分:
<gmd:fileIdentifier xmlns:gmx="http://www.isotc211.org/2005/gmx">\r\n <gco:CharacterString>0211fa18-e0a4-4d2ed26-7580726e593c</gco:CharacterString>\r\n </gmd:fileIdentifier>\r\n <gmd:language>\r\n <gco:CharacterString>eng</gco:CharacterString>\r\n </gmd:language>\r\n <gmd:hierarchyLevel>\r\n <gmd:MD_ScopeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/ML_gmxCodelists.xml#MD_ScopeCode" codeListValue="dataset" />\r\n </gmd:hierarchyLevel>\r\n <gmd:contact>\r\n <gmd:CI_ResponsibleParty>\r\n <gmd:organisationName>\r\n <gco:CharacterString>Research</gco:CharacterString>\r\n </gmd:organisationName>\r\n <gmd:contactInfo>\r\n <gmd:CI_Contact>\r\n <gmd:address>\r\n <gmd:CI_Address>\r\n <gmd:electronicMailAddress>\r\n <gco:CharacterString>pippo@gmail.com</gco:CharacterString>\r\n </gmd:electronicMailAddress>\r\n </gmd:CI_Address>\r\n </gmd:address>\r\n </gmd:CI_Contact>\r\n </gmd:contactInfo>\r\n
正如您在每个标记的末尾看到的那样,字符串“\ r \ n”就是问题所在。 我尝试使用以下bash命令:
string='\r\n'
sed -i 's/$string/''/g' test.xml
但它不起作用,没有空字符串替换$ string变量。
你能告诉我我做错了吗?提前致谢
答案 0 :(得分:1)
关注awk可能对你有帮助。
awk '{gsub(/\\r\\n/,"")} 1' Input_file
说明: 只需使用awk的gsub实用程序,它将全局替换\ r \ n为NULL,指向此处\ r \ n和\ n是写在这里消除\特殊意义,它应该采取文字特征,而不是它的特殊含义。 1将打印行。
答案 1 :(得分:1)
$1$
是Windows行结尾。
我不知道您正在使用哪种XML解析器或使用哪种编程语言,但尝试通过调用\r\n
将文件首先转换为Unix格式,然后将其提供给解析器。您也可以使用常见的文本编辑器进行转换。
希望有所帮助。
答案 2 :(得分:1)
您的string
变量包含\r\n
作为特殊字符序列。但是你需要在输入文件中按字面意思替换它。
使用以下 sed 方法:
sed 's#\\r\\n##g' test.xml
输出(对于您当前的输入片段):
<gmd:fileIdentifier xmlns:gmx="http://www.isotc211.org/2005/gmx"> <gco:CharacterString>0211fa18-e0a4-4d2ed26-7580726e593c</gco:CharacterString> </gmd:fileIdentifier> <gmd:language> <gco:CharacterString>eng</gco:CharacterString> </gmd:language> <gmd:hierarchyLevel> <gmd:MD_ScopeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/ML_gmxCodelists.xml#MD_ScopeCode" codeListValue="dataset" /> </gmd:hierarchyLevel> <gmd:contact> <gmd:CI_ResponsibleParty> <gmd:organisationName> <gco:CharacterString>Research</gco:CharacterString> </gmd:organisationName> <gmd:contactInfo> <gmd:CI_Contact> <gmd:address> <gmd:CI_Address> <gmd:electronicMailAddress> <gco:CharacterString>pippo@gmail.com</gco:CharacterString> </gmd:electronicMailAddress> </gmd:CI_Address> </gmd:address> </gmd:CI_Contact> </gmd:contactInfo>
答案 3 :(得分:1)
\
,因为sed中的\r
序列更改为回车符
string='\\r\\n'
也可以在双引号之间进行变量扩展,但不在引号引号
之间进行sed -i "s/$string//g" test.xml
一般情况下请注意,如果包含/
,则因为注入而无法使用任何字符串,这是代码生成的一般问题。
答案 4 :(得分:1)
试试这个:
sed 's/\\r\\n//g' test #test has the line
[user@ip check]$ sed 's/\\r\\n//g' test
<gmd:fileIdentifier xmlns:gmx="http://www.isotc211.org/2005/gmx"> <gco:CharacterString>0211fa18-e0a4-4d2ed26-7580726e593c</gco:CharacterString> </gmd:fileIdentifier> <gmd:language> <gco:CharacterString>eng</gco:CharacterString> </gmd:language> <gmd:hierarchyLevel> <gmd:MD_ScopeCode codeList="http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/resources/codelist/ML_gmxCodelists.xml#MD_ScopeCode" codeListValue="dataset" /> </gmd:hierarchyLevel> <gmd:contact> <gmd:CI_ResponsibleParty> <gmd:organisationName> <gco:CharacterString>Research</gco:CharacterString> </gmd:organisationName> <gmd:contactInfo> <gmd:CI_Contact> <gmd:address> <gmd:CI_Address> <gmd:electronicMailAddress> <gco:CharacterString>pippo@gmail.com</gco:CharacterString> </gmd:electronicMailAddress> </gmd:CI_Address> </gmd:address> </gmd:CI_Contact> </gmd:contactInfo>