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 /\$/;
}