perl正则表达式命令行通过ssh运行

时间:2015-01-06 10:00:27

标签: regex perl ssh

我试图通过ssh运行Perl正则表达式但是我收到错误" 变量名必须包含字母数字字符。"

我尝试执行的Perl命令是

perl -p -i '.backup'  -e ' if ( m/\[MyTag\]/../^$/ ) { s/Item\d+/Item150/ ; }' ~/myFile.txt

我使用的SSH命令是

ssh user1@host1 -n " here I'm placing my perl command"

我确实尝试添加\以避免通过当前shell转换$ sign以及更改ssh duple配额"单身并添加\'#39;到perl命令,但我总是得到上面的错误或不匹配'

我确实尝试过以下

ssh user1@host1 -n "perl -p -i '.backup'  -e ' if ( m/\[MyTag\]/../^$/ ) { s/Item\d+/Item150/ ; }' ~/myFile.txt"

ssh user1@host1 -n "perl -p -i '.backup'  -e ' if ( m/\[MyTag\]/../^\$/ ) { s/Item\d+/Item150/ ; }' ~/myFile.txt"

ssh user1@host1 -n 'perl -p -i \'.backup\'  -e \' if ( m/\[MyTag\]/../^$/ ) { s/Item\d+/Item150/ ; }\' ~/myFile.txt'

还有\ $以及\\ $和更多

2 个答案:

答案 0 :(得分:2)

让计算机处理引用:

#!/usr/bin/perl
use Net::OpenSSH;

my $ssh = Net::OpenSSH->new('user1@host1');
$ssh->system('perl', '-p', '-i', '.backup', '-e', <<PERL_CODE, \'~/myFile.txt');
if (m/\[MyTag\]/ .. m/^$/) {
    s/Item\d+/Item150/;
}
PERL_CODE

答案 1 :(得分:0)

为逃避美元符号,在前面放三个反斜杠。以下命令似乎对我有用:

ssh user1@host1 -n "perl -p -i '.backup'  -e ' if ( m/\[MyTag\]/../^\\\$/ ) { s/Item\d+/Item150/ ; }' ~/myFile.txt"