我有一个可以在命令行上运行的grep命令,但是不在我的perl脚本中

时间:2018-11-26 04:02:20

标签: perl grep

我认为这可能是由于转义字符引起的。 脚本和正在访问的文件(input.scs)也位于同一目录中。

my @var=`grep -o '"[^"]\+"' ./input.scs | sed 's/"//g'`;
print "-D @var\n";

实际上应该生成多行时,输出将返回空。 grep命令在引号内搜索数据并打印数据。

1 个答案:

答案 0 :(得分:0)

正如@ikegami所评论的那样,您需要在反引号运算符内将反斜杠换行,否则Perl将尝试对其进行插值:

∃y IsKing(y) → ∀x (IsMan(x) ∧ Loves(x,y))

但是,除了使用外部命令外,您还可以使用Perl联机代码来完成此操作:

my @var = `grep -o '"[^"]\\+"' input.scs | sed 's/"//g'`;

这将返回相同的输出,即所有匹配项的列表,并删除双引号。

或者如果您想就地编辑文件:

perl -ne 'print "$1\n" while (m/"([^"]+)"/g)' input.scs