[완료]perl초보입니다. 정규식 관련질문입니다...
글쓴이: itexpert / 작성시간: 금, 2007/06/29 - 9:55오전
perl 초보입니다 ^^;
정규식과 관련하여 질문있습니다.
my $s = join "", <>;
로 텍스트파일을 변수에 몽창 집어넣습니다.
그러면, 변수의 내용에는
REM xxxxxxxxxxxxxx
REM XXXXXXXXXXXXXXXXXXXXX
ABCDEFG ...............
제가 하고싶은 작업은
REM으로 시작하는 행들을 변수에서 제거하고싶습니다
결과
ABCDEFG ...............
이렇게요....
답변주시면 감사하겠습니다.
오늘도 좋은하루 보내세요~~
Forums:


s/^REM.*$\n// 인듯...
s/^REM.*$\n//
인듯...
=============================
야후!
읔...
답변 감사합니다
$s =~ s/^REM.*$\n/ /g;
위처럼 했는데..에러납니다.
$s =~ s/^REM.*\n//gm;
$s =~ s/^REM.*\n//gm;
감사합니다.
답변 감사드립니다.
좋은 하루 되세요.^^
여담이지만 text
여담이지만 text 파일을 통째로 넣는 권장하는 깔끔한 방법은
power slurping 이라고 다음과 같은 표현 방법이 있습니다. :-)
my $lines = do { local $/; <$fh> };파일 핸들을 흔히 사용하는 BAREWORD라는 대문자(FH)등을 사용하지
않은 것은 파일 핸들을 로컬(렉시컬)로 선언해서 스코프 내의 제어에
두기 위함입니다. 역시 권장하는 방법입니다.
이렇게 파일 핸들을 여는 방법은 다음과 같습니다(거의 똑같죠)
# 전역 파일핸들 open FH, "<", $file or exit_with_usage("$!"); # 로컬 파일핸들(권장) open my $fh, "<", $file or exit_with_usage("$!");또한 마지막으로 이런 정규 표현식을 이용한 텍스트 처리시는
xms옵션을 추가해서 사용하는 것을 추천합니다.
x옵션은 내부의 공백과 주석을 허용하며(읽기가 편해져요 :)
m은 ^과 $이 \n 안에서 동작하게 허용하며
s는 .이 \n도 매치하도록 합니다.
그리고 지금처럼 여러번(주석을 계속) 치환해야 할 경우는
g 옵션도 추가해야겠죠
P.S.
행단위 주석이라면, 한번에 넣지 않고
한 줄 씩 처리하는 것이 더 쉬울 수도 있어요~ :-)
---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!
Kim Do-Hyoung Keedi
----
use perl;
Keedi Kim
잠시요.
답변감사드립니다.
답변주신데로 했는데..안되서요
my $fh = "cr_ind_TRECOMM.sql";
my $s = do{ local $/; <$fh> };
어떻게 사용하는지요.^^;
온전한 예제입니다.
온전한 예제입니다. :-)
리눅스 기준으로 실행권한이 있다면 커맨드라인에서 ./remove_comment.pl file1.txt file2.txt 와 같이 실행 할 수 있습니다.
#!/usr/bin/perl #=============================================================================== # # FILE: remove_comment.pl # # USAGE: ./remove_comment.pl <file1> [ <file2> ... ] # # DESCRIPTION: 주석 제거 # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: (), <> # COMPANY: # VERSION: 1.0 # CREATED: 2007년 06월 29일 10시 31분 39초 KST # REVISION: --- #=============================================================================== use strict; use warnings; # 커맨드 라인 인자 처리 my @files = @ARGV; exit_with_usage("주석을 제거할 하나 이상의 파일 명이 인자로 필요합니다") if @files < 1; # 파일 목록에 대해 하나씩 처리 for my $file ( @files ) { # Power Slurping open my $fh, "<", $file or exit_with_usage("$!"); my $lines = do { local $/; <$fh> }; close $fh; # 주석 제거 $lines =~ s/ ^ REM ([ \t]+ [^\n]*)* //gxms; # 파일에 덤프 open $fh, ">", "$file.new" or exit_with_usage("$!"); print $fh $lines; close $fh; } # 사용법 출력 후 프로그램 종료 sub exit_with_usage { my $msg = shift; print "$msg\n\n" if $msg; print "Usage: $0 <file1> [ <file2> ... ]\n"; die; }---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!
Kim Do-Hyoung Keedi
----
use perl;
Keedi Kim
감사드립니다. (--)(__)
완벽한 예제까지 머라 감사의 말씀을 드려야 할지....
주말 잘보내세요...
댓글 달기