2012-02-13 2 views
2

sed를 사용하여 패턴으로 시작하고 세미콜론 (;)으로 끝나는 코드 (단락)의 일부를 삭제하고 싶습니다. sed를 사용하여 코드 패턴을 삭제 하시겠습니까?

지금 나는 새로운 라인

sed -e '/./{H;$!d;}' -e 'x;/Pattern/!d' 

내가 아닌 구분 기호로 대신 패턴으로 세미콜론을 사용하는 방법에 대해 혼란 스러워요에 의해 분리 된 단락을 삭제하는 예를 건너 왔어요. 감사합니다. .

+0

예를 들어 데이터와 경험치를 보여주십시오 결과를 분석합니다. – potong

+0

예, 확실한 입력, http://pastebin.com/hHXJjtiS – Harsh

답변

2

다른 옵션은 주소 범위의 GNU 확장을 사용하는 것입니다.

다음 예제는 다음을 의미합니다. 패턴으로 시작하는 줄의 모든 항목을 세미콜론으로 끝날 때까지 삭제하십시오.

sed '/pattern/,/;$/ d' infile 

편집은 거친의 댓글을 :

다음 sed 명령을 시도해보십시오

sed '/^\s*LOG\s*(.*;\s*$/ d ; /^\s*LOG/,/;\s*$/ d' infile 

설명 :

/^\s*LOG\s*(.*;\s*$/ d   # Delete line if begins with 'LOG' and ends with semicolon. 
/^\s*LOG/,/;\s*$/ d    # Delete range of lines between one that begins with LOG and 
            # other that ends with semicolon. 
+0

표시되는 코드는 주소 범위 처리에 대한 GNU 확장에 의존하지 않습니다. 이것은 20 년 이상 전에 원래의 sed와 함께 작동합니다 ;-) 모두에게 행운을 빌어 요! – shellter

+0

입력이 한 줄로 된 경우에만 작동합니다. 틀 렸으면 고쳐줘. 버퍼가 필요하지 않도록해야합니다. 샘플 http://pastebin.com/hHXJjtiS – Harsh

+0

@shellter : 감사합니다. – Birei

1

이 당신을 위해 작동 될 수 있습니다

cat <<! >file 
> a 
> b 
> ; 
> x 
> y 
> ; 
> ! 
sed '/^[^;]*$/{H;$!d};x;s/;//;/x/!d' file 

x 
y 

설명 : 회선에서

  • (가) 하나의 ;에없는 것이 /^[^;]*$/
  • 보류 영역에 위의 라인을 추가 (HS)를 제거하고 패턴 공간 (PS)을 삭제하고 파일의 마지막 줄에 있지 않으면 다음 반복을 시작합니다. {H;$!d}
  • 라인이 비어 /^$/ 또는 파일의 마지막 줄 경우 : x
  • 패턴 (x을)에 대한 첫 번째 ;s/;//
  • 검색 삭제
    • 을 교환 HS에 발견되어 있지 않은 경우 삭제 PS /x/!d

NB 패턴 /x/을 발견하면 시작 패턴 사용 /^x/을 찾을 수 있습니다.

편집 :

데이터와 예상 결과를 본 한 후이 당신을 위해 작동 할 수 있습니다

sed '/^\s*LOG(.*);/d;/^\s*LOG(/,/);/d' file 
+0

감사합니다. 그것은 나의 의심을 해결합니다. – Harsh

관련 문제