2014-04-22 5 views
2

나를 위해 작동하는 여러 줄 정규식 문을 가져 오는 데 문제가 있습니다.Perl MultiLine Regex 문

기본적으로, 다음 빈 줄을 제거하려고합니다.) ->. 다중 선 섹션을 맞추는 것은 약간 까다 롭습니다. 여기에 지금까지이 작업은 다음과 같습니다

Input: 
setUp = 
    config: (cb) -> 

    randomFunction (cb)-> 

     cb?() 

    nestedObject: 
    key: (cb) -> 

     cb?() 


Output: 
setUp = 
    config: (cb) -> 
    cb?() 

    nestedObject: 
    key: (cb) -> 
     cb?() 

답변

2

그냥 끝 조건으로 모든 빈 줄을 제거, 플립 플롭 범위 라인 처리로 라인을

perl -i -pe 'm{\) ->\s*$}...!s/^\s*$//' file.txt 
+0

위대한 작품입니다! perl에 대해 좀 더 배우기 위해 구문을 조금만 더 자세히 설명해 주시겠습니까? – JonMorehouse

+0

{} ... 조금 혼란 스럽네요! 구성. 내가 이해하는 방법은 ') -> \ s * $'와 일치하고 한 번만 일치하면 s/^ \ s * $/(예 : 빈 행) 만 "잡아라"... 나는 새로운 perl – JonMorehouse

+0

perl을 처음 사용하는 사람이라면 위의 내용이 약간 혼란 스러울 수 있습니다. 그러나 중요한 세부 사항은 [perlop #Range operators'] (http://perldoc.perl.org/perlop.html#Range-Operators)에 설명되어 있습니다. – Miller

2

이동 모양 미리 밖으로 줄 바꿈 문자 :

perl -00 -p -i -e 's/\) ->(?=[^\n]*\n\n)$/\) ->\n/m' $filename 

다음은 내 입/출력입니다. 시도해보십시오.

s/\) ->(?=[^\n]*)\n\n/\) ->\n/mg; 

룩어 헤드의 문자는 대체되지 않습니다. 당신도보고 미리 필요한 이유

(사실, 난 볼 수 없습니다.

s/\) ->.*\n\n/\) ->\n/mg; 

또한 작업을 수행하고, 또한 만들 것 모양 미리 일치하는 0이 아닌 길이 순서 전체 패턴 일치가 실패합니다.

/g 플래그는 문서에서 두 번 이상이 작업을 수행하기를 원하기 때문에 사용할 수 있습니다. 읽기

perl -i -pe '/\) ->\s*$/...!s/^\s*$//' file.txt 
아마도

좀 더 쉽게 :

+0

이 솔루션은 작동합니다. 도와 주셔서 감사합니다! – JonMorehouse

2

당신은 사용할 수 있습니다 이 여분 :

s/\) ->\R\K\R+//g 

\R는 원자단 대한 지름길 몇 가지 일반적인 유형의 개행 문자가 포함되어 있습니다.
\K은 일치 결과에서 모두 왼쪽을 제거합니다.