我正在尝试从远程计算机上的xml文件中获取版本号。我通过Net :: SSH :: Perl cmd
函数执行此操作。它看起来像这样:
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-module无关,因为
perl -e "system(\"head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs\");"
同时打印
<version>2.6</version>
答案 0 :(得分:3)
您正在使用双引号。在双引号中,\
是特殊的,因此只有+
而非\+
传递给sed
。
您可以使用q()
运算符来避免反斜杠反斜杠:
$ssh->cmd(q(head -11 /some/path/to/the/file.xml | tail -1 | sed 's/<[^>]\+>//g' | xargs));