从文件结尾的grep线以backslash结尾



i有一个文件,命名为带有后斜线的文件。喜欢

 a
sbajcb
ksajcnx 
cjscnk
snk
sknds

当我使用此命令grep -G '\$' FILE时,我将获得结果。

但是当我在perl中执行此操作时,我没有得到结果。

我的代码是

#! /usr/bin/perl
my $runme=$ARGV[0];
if(-e $runme) {
my $all_lines = `grep -G '\$' $runme`;
print $all_lines;
}

我的代码有什么问题?,我尝试使用'\$',但仍未得到结果。

谢谢

perl已经剥离一层引号,因此执行的实际命令变为

grep -G '$' $runme

要解决这个问题,再次将后斜线加倍,将一个留给$:

my $all_lines = `grep -G '\\$' $runme`;

当然,您可以直接在perl中重新进来grep

open my $fh, "<", $runme or die "Cannot open '$runme': $!";
while (<$fh>) {
    if (/\$/) {
        print $_;
    }
}

不要忘记以后关闭$ fh,要么让它离开范围或明确的close $fh

鉴于您的文件名已经在 @ARGV中,因此无需外壳来实现这一目标。在perl中实现它可以节省启动外壳所需的时间,并且是跨平台。

#!/usr/bin/perl
use strict;
use warnings;
exit unless -e $ARGV[0];
# <> will return records from the files
# named in @ARGV
while (<>) {
  print if /\$/;
}

最新更新