2010-03-06 7 views
1

나는 한 기존 스크립트에 따라와 코드가 있습니다이 코드에서 줄 바꿈을 제거하는 방법?

while (<FPTR>) # While still input lines in the file... 
{ 
    if($_ =~ /\x1b&[email protected] 
/) 
    { 
    $aa=$_; 
    $aa =~ s/\x1b&[email protected] 
/
\x1b&[email protected]/; 
    print STDOUT $aa; 
    } 
... 
} 

당신이 설명해 주 시겠어요을 - 어떻게 올바른 코드로 대체하는 않습니다이 코드를 어떻게 미상? "if"및 "= ~"에 줄 바꿈이 들기를 좋아하지 않습니다. 이 코드를 변경할 수 있습니까?

답변

3

, 줄 바꿈은 아마 $ 교체 할 수 있습니다. 그런 다음 chomp 입력 줄의 복사본을 사용하여 줄 바꿈을 제거 할 수 있어야합니다. EDIT : \n 앞에 출력하십시오.

while (<FPTR>) # While still input lines in the file... 
{ 
    if (/\x1b&[email protected]$/) { 
    $aa = $_; 
    chomp $aa; 
    print STDOUT "\n" . $aa; 
    } 
... 
} 

이렇게하면 정규식의 여러 복사본을 제거함으로써 코드가 단순 해집니다.

+1

문제는 귀하의 버전이 원래 스크립트처럼 패턴보다 먼저 개행을 이동하지 않는다는 것입니다. – rsp

+0

@rsp : 동의합니다. 나는's ///'구분자의 오른쪽에있는 개행 문자를 완전히 놓쳤습니다. 나는 나의 대답을 업데이트했다. – toolic

0

그 코드는 newline이 뒤 따르는 바이트 시퀀스와 패턴 앞의 newkline을 찾은 것 같습니다. 당신은 줄 바꿈 (홍보 \r\n 스크립트가 DOS 형식 인 경우)에 대한 \n를 사용할 수 있으며, 때라도 내가 생각하는 것과 같습니다

while (<FPTR>) # While still input lines in the file... 
{ 
    if($_ =~ m/\x1b&[email protected]\n/) 
    { 
    $aa=$_; 
    $aa =~ s/\x1b&[email protected]\n/\n\x1b&[email protected]/; 
    print STDOUT $aa; 
    } 
... 
} 
1

당신은 라인이 \n 피드를 대체 할 수 있습니다. perldoc perlop에서 'Quote and Quote-like operators'의 이스케이프 시퀀스 섹션을 참조하십시오.

$ 메타 문자도 사용할 수 있습니다. perldoc perlre에서 : 재정의되지 않은 INPUT_RECORD_SEPARATOR 가정

$ Match the end of the line (or before newline at the end) 
0

1 처리 전)는 씹는를 (고 시도

while (<FPTR>) { 
    chomp; 
    .... 
} 
+1

그러나 chomp는 줄이'ESC & d @'로 끝나는 경우에만 필요합니다. –

0

이 까다로운 일이다

행의 끝에 '& 차원 @'다음 이스케이프 캐릭터
/\x1b&[email protected] 
/

. 따라서, 실제로 사용할 수 있습니다

while (my $line = <FPTR>) { 
    if ($line =~ /x1b&[email protected]$/) { 
     chomp $line; 
     print $line; 
    } 
} 

내가 $aa$_의 사본을 만들 필요가있는 이유를 참조하지만 정말 필요한 경우에만 필요

if ((my $copy = $line) =~ /x1b&[email protected]$/) { 
     chomp $copy; 
     print $copy; 
    } 
} 

사용하지 않는 다른 파일 핸들이 기본값으로 선택된 경우 파일 핸들로 STDOUT을 지정하십시오.

관련 문제