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

时间:2017-09-21 10:00:53

标签: perl csh

我有一个名为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;
}

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

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

鉴于您的文件名已经在@ARGV中,因此无需执行此操作即可。在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 /\\$/;
}