当前位置:  开发笔记 > 编程语言 > 正文

如何在Perl脚本中执行Perl one liner

如何解决《如何在Perl脚本中执行Perloneliner》经验,为你挑选了1个好方法。

我想在Perl脚本中执行下面的一行,以匹配一行与变量的值,ownertype从文件中删除它:

perl -i -ne\"print unless /\b${owner}\b/ and /\b${type}\b/;\" /tmp/test

内容/tmp/test:

node01    A    10.10.10.2
node02    A    10.20.30.1

当我在shell中执行时,这完全正常,但在Perl脚本中也不起作用.

我曾尝试使用反引号,system而且exec.似乎没什么用.

`perl -i -ne\"print unless /\b${owner}\b/ and /\b${type}\b/;\" /tmp/test`

system(q(perl -i -ne\"print unless /\b${owner}\b/ and /\b${type}\b/;\" /tmp/test));

是否可以在Perl脚本中执行Perl一个内衬?

如果是这样,我在这里做错了什么?

注意:我不需要使用sed,grep,awk等从文件中删除一行的解决方案.



1> ikegami..:

您不希望从shell生成Perl代码,因此您将使用shell中的以下其中一项:

perl -i -ne'
   BEGIN { $owner = shift; $type = shift; }
   print unless /\b\Q$owner\E\b/ and /\b\Q$type\E\b/;
' "$owner" "$type" /tmp/test

要么

ARG_OWNER="$owner" ARG_TYPE="$type" perl -i -ne'
   print unless /\b\Q$ENV{ARG_OWNER}\E\b/ and /\b\Q$ENV{ARG_TYPE}\E\b/;
' /tmp/test

Perl等价物是

system('perl',
   '-i',
   '-n',
   '-e' => '
      BEGIN { $owner = shift; $type = shift; }
      print unless /\b${owner}\b/ and /\b${type}\b/;
   ',
   $owner,
   $type,
   '/tmp/test',
);

local $ENV{ARG_OWNER} = $owner;
local $ENV{ARG_TYPE}  = $type;
system('perl',
   '-i',
   '-n',
   '-e' => 'print unless /\b\Q$ENV{ARG_OWNER}\E\b/ and /\b\Q$ENV{ARG_TYPE}\E\b/;',
   '/tmp/test',
);

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有