我试图通过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'
还有\ $以及\\ $和更多
答案 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"