2013-03-14 2 views
-1

파일에서 perl을 사용하여 + s를 포함하여 + s 사이의 행을 인쇄하는 방법은 무엇입니까? 파일에이 줄이 있습니다. perl에서 문자 사이의 줄을 포함하도록 파일을 구문 분석하는 방법은 무엇입니까?

blah blah 
+++++++++++++++++++++++++++++++++ 
this line should be included. 
this line should be included too. 
+++++++++++++++++++++++++++++++++ 
abcd 100101001010 

원하는 출력

:

이 같은
+++++++++++++++++++++++++++++++++ 
this line should be included. 
this line should be included too. 
+++++++++++++++++++++++++++++++++ 
+0

첫 번째 플러스 라인을 식별 할 때 부울 플래그를 참으로 설정하십시오. 플러스의 두 번째 줄에 도달하면 다시 false로 바꿉니다. 플래그가 참일 때만 출력됩니다. –

+0

이것은 정규식으로 해결할 수있는 것이 아니라 Robert Harvey가 제안한 전략을 사용하는 것이 좋습니다. Regexes는 어휘 단위를 얻는 렉서 작성에 강력하지만,이 정규식으로 해결하기에는 너무 복잡합니다. – jdehaan

+0

이 문제는 예를 들어 블록 주석을 추출하는 것과 비슷하지만 단순한 렉서 작업보다 문법적 인 파서 작업이라는 것을 의미했습니다. 덕분에 – jdehaan

답변

4

당신은과 같이 범위 연산자 ...를 사용할 수 있습니다

perl -nlwe 'print if /^\++$/ ... /^\++$/' input.txt 

3 ~ 도트 범위 연산자에는 여기에서 사용할 수있는 특별한 기능이 있습니다. perldoc perlop

가입일 [은 "두 점" ".."연산자] 오른쪽 피연산자를 테스트하고 (AWK에서와 같이)에 해당되었다 동일한 평가에 오류가 있지만, 여전히 한번 true를 반환 할 수있다. sed에서와 같이 다음 평가 때까지 오른쪽 피연산자를 테스트하지 않으려면 두 개 대신에 세 개의 점 ("...")을 사용하십시오. 다른 모든면에서 "..."은 ".."처럼 행동합니다.

+0

순수 천재 !!! 감사합니다 –

+0

당신은 오신 것을 환영합니다. – TLP

1

뭔가 일할 수 :

while(<>){ 
    print if /^\++$/ .. /^\++$/; 
} 
+0

. 거의 효과가 있었다. –

관련 문제