xmlstarlet - 删除换行符

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,'&#xa;' ,'@')" 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"转换为空的问题.

Pab*_*ozo 6

您可以通过定义包含换行符值的变量来以一般方式解决此问题:

--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)