我们正在将旧环境迁移到新环境。旧环境中的电子邮件地址可能在前端或末尾有空格。然而,随着新的环境,这是不允许的。
示例文件:
<PEOPLE objectclass="[objPeople, objlwsnRMResource, top]" id="jdoe"> <ID><![CDATA[jdoe]]></ID> <ALLOWJOBQUEUE><![CDATA[N]]></ALLOWJOBQUEUE> <GROUP><![CDATA[ESS Employee]]></GROUP> <LASTNAME><![CDATA[Doe ]]></LASTNAME> <NAME><![CDATA[John Doe]]></NAME> <FIRSTNAME><![CDATA[John ]]></FIRSTNAME> <EMAIL><![CDATA[[email protected] ]]></EMAIL> </PEOPLE>
从这里你可以看到它有 xml 标签。 LASTNAME、FIRSTNAME 和 EMAIL 等标签中的某些位置存在空格。但是,我不希望名称之间有空格,例如名称标签“John Doe”中的空格。我想保持这样。
如何从文件中的某个标记名称后面取出尾随空格,并将该文件保存到位,或将其复制到另一个文件。
期望的结果:
<PEOPLE objectclass="[objPeople, objlwsnRMResource, top]" id="jdoe"> <ID><![CDATA[jdoe]]></ID> <ALLOWJOBQUEUE><![CDATA[N]]></ALLOWJOBQUEUE> <GROUP><![CDATA[ESS Employee]]></GROUP> <LASTNAME><![CDATA[Doe]]></LASTNAME> <NAME><![CDATA[John Doe]]></NAME> <FIRSTNAME><![CDATA[John]]></FIRSTNAME> <EMAIL><![CDATA[[email protected]]]></EMAIL> </PEOPLE> <PEOPLE objectclass="[objPeople, objlwsnRMResource, top]" id="jdoe2"> <ID><![CDATA[jdoe2]]></ID> <ALLOWJOBQUEUE><![CDATA[N]]></ALLOWJOBQUEUE> <GROUP><![CDATA[ESS Employee]]></GROUP> <LASTNAME><![CDATA[Doe]]></LASTNAME> <NAME><![CDATA[Jane Doe]]></NAME> <FIRSTNAME><![CDATA[Jane]]></FIRSTNAME> <EMAIL><![CDATA[[email protected]]]></EMAIL> </PEOPLE>
有人做过这样的事吗?
答案1
您可以使用sed
删除序列前的空格]]
:
sed 's/ *]]/]]/g' file.xml
这里,正则表达式“ *]]
”匹配任何空格(“ ”)零次或多次(“
*
”),后跟文字“ ]]
”。然后,任何此类匹配都将替换为“ ]]
”。结果写入标准输出,您可以在其中以任何合适的方式重定向它。
如果您有合适的版本sed
可以选择使用“ \s
”而不是“ ”来表示任何空白字符(即不仅是空格,还包括制表符和其他非打印字符)。