【发布时间】:2015-12-29 15:16:29
【问题描述】:
我想在 Perl 脚本中的一行下面执行,以匹配变量 owner 和 type 的值并将其从文件中删除:
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 one liner?
如果是这样,我在这里做错了什么?
注意:我不需要使用 sed、grep、awk 等从文件中删除一行的解决方案。
【问题讨论】:
-
您应该打印出您尝试执行的命令,然后您应该会看到问题:
print q(perl -i -ne\"print unless /\b${owner}\b/ and /\b${type}\b/;\" /tmp/test); -
还可以查看 perldoc perlop 中的
q{}。 -
既然已经在 perl 中,为什么还要运行另一个 perl?阅读
perlrun以了解-i和-n的作用——您可以轻松地复制它们。-i可能看起来很大,但实际上你并不需要大部分。 -
老实说,我建议“不要”。充其量是令人困惑的。只需将其扩展 -
perl -MO=Deparse将为您完成一定数量的工作,因此您将获得更快、更清晰的脚本。一个班轮很方便,但他们不是很好的编程风格
标签: perl