dim*_*mba 6 xml linux xmlstarlet
我有以下文件log.xml:
<entry>
<message>Line 1
Line 2 and so on</message>
</entry>
Run Code Online (Sandbox Code Playgroud)
在CentOS 5.4上使用xmlstarlet 1.0.1,如果我运行以下命令,同时删除换行符message:
xml sel -t -m //entry -v "translate(message,'
' ,'@')" log.xml
Run Code Online (Sandbox Code Playgroud)
结果是:
Line 1@ Line 2 and so on
Run Code Online (Sandbox Code Playgroud)
在CentOS 6上使用xmlstarlet:
1.3.1
compiled against libxml2 2.7.6, linked with 20706
compiled against libxslt 1.1.26, linked with 10126
Run Code Online (Sandbox Code Playgroud)
我会收到:
Line 1
Line 2 nd so on
Run Code Online (Sandbox Code Playgroud)
注意"和"转换为空.我想这不是xmlstarlet的问题,而是libxslt的一些变化.
任何想法如何解决它?
UPDATE
添加字母"a"转换为空的问题.
您可以通过定义包含换行符值的变量来以一般方式解决此问题:
--var linebreak -n --break
Run Code Online (Sandbox Code Playgroud)
然后使用该变量作为translate函数的第二个参数:
xml sel -t -m //entry
--var linebreak -n --break
-v "translate(message, \$linebreak ,'@')"
log.xml
Run Code Online (Sandbox Code Playgroud)