2017-09-21 8 views
0

파일 끝에 백 슬래시가있는 파일이 일부 줄에 있습니다. like백 슬래시로 끝나는 파일의 grep 행

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

'qx //'에서 무엇이 있습니까? – simbabque

답변

1

펄은 이미 인용 한 층을 제거합니다, 그래서 실행되는 실제 명령은 $ 하나를 떠나,

grep -G '\$' $runme 

가 다시 더블 백 슬래시를 해결하기 위해이된다 :

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

물론 grep을 직접 perl로 다시 구현할 수 있습니다.

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

나중에 범위를 벗어나거나 close $fh을 벗어나 $ fh를 닫는 것을 잊지 마십시오.

1

파일 이름이 이미 @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 /\\$/; 
}