我有一个名为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;
}
我的代码有什么问题? ,我尝试使用'\\$'
,仍然没有得到结果。
由于
答案 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 /\\$/;
}