Unix 쉘을 통해 Perl 스크립트를 실행하기 위해 Perl 명령을 사용하는 system
데 문제가 있습니다 .
Unix에서 Perl로 변환하기 위해 적절하게 조정해야 하는 더 복잡한 정규식 명령이 있고 잘 작동하지만 여기서 누락된 것이 무엇인지 알 수 없는 것 같습니다.
Mobaxterm v7.1 및 Putty 0.60을 사용하여 테스트했습니다.
파일( file.txt
)이 있습니다.
23445 dir1/dir2/dir3
21343 dir1/dir2/dir3/dir4/file.B2
54322 dir1/dir2/dir3/file3.P
53223 dir1/dir2/dir3/dir4/dir5
23412 dir1/dir2/dir3/dir4/dir5/file5.xsd
54166 dir1/dir2/file6.AB
64544 dir1/dir2/fil7.ABE
grep
이 파일에서는 파일의 행(디렉토리 제외: 행 1 및 4)만 포함하고 이를 새 파일에 저장하려고 합니다 .
system("grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt");
file2.txt
아무것도 변경되지 않았 file.txt
으며 디렉토리는 여전히 포함되어 있습니다.
그러나 이 명령은 Unix 셸을 통해 실행됩니다(앞의 백슬래시 없음 $
).
grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*$' file.txt > file2.txt
file2.txt
산출:
21343 dir1/dir2/dir3/dir4/file.B2
54322 dir1/dir2/dir3/file3.P
23412 dir1/dir2/dir3/dir4/dir5/file5.xsd
54166 dir1/dir2/file6.AB
64544 dir1/dir2/fil7.ABE
물론 $
Perl이 이를 알 수 없는 문자열로 읽지 않도록 Perl 시스템 명령에서 문자를 이스케이프 처리해야 했습니다. 그 외에도 어떤 다른 시스템 명령을 조정해야 합니까?
답변1
큰따옴표에는 백슬래시가 필요합니다. 즉, 점 앞에 백슬래시를 두 배로 입력합니다.
system("grep '^.*\\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt");
# ^
# |
# Here.