从以反斜杠结尾的文件中查找行

To grep lines from file ending with backslash

我有一个名为 FILE 的文件,在某些行的末尾带有反斜杠。喜欢

 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 中,因此无需 shell out 来实现此目的。在 Perl 中实现它可以节省启动 shell 所需的时间并且是跨平台的。

#!/usr/bin/perl

use strict;
use warnings;

exit unless -e $ARGV[0];

# <> will return records from the files
# named in @ARGV
while (<>) {
  print if /\$/;
}