0

我正在尝试从远程机器上的 xml 文件中获取版本号。我通过 Net::SSH::Perlcmd函数做到这一点。它看起来像这样:

my ($version, $err, $exit) = $ssh->cmd("head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs");
print Dumper $version;

我想要实现的是,从 XML 标记中提取数字<version>2.6</version>

当我通过 PuTTy 在 ssh-shell 上使用 cmd 时,它工作得很好

user@remotemachine:~>head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs
2.6
user@remotemachine:~>

但是,Perl 打印

$VAR1 = '<version>2.6</version>
';

任何想法,为什么它不起作用?

编辑:显然它与 Net::SSH::Perl 模块无关,因为

perl -e "system(\"head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs\");"

也打印

<version>2.6</version>

4

1 回答 1

3

您正在使用双引号。在双引号中,\是特殊的,所以只+传递\+sed.

您可以使用q()运算符来避免反斜杠:

$ssh->cmd(q(head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs));
于 2013-08-30T09:25:42.987 回答