동일한 패턴으로 시작하는 연속 줄을 삭제하려면 awk 또는 sed를 사용하세요.

동일한 패턴으로 시작하는 연속 줄을 삭제하려면 awk 또는 sed를 사용하세요.

예를 들어 다음 파일이 있는 경우 sed 또는 awk를 사용하여 동일한 패턴 "CREATE CURRENT"로 시작하는 연속 행을 삭제하고 싶습니다.

CREATE CURRENT = 'aaaa' ;
CREATE CURRENT = 'bbbb' ;
CREATE CURRENT = 'aaaa' ;
CREATE CURRENT = 'dddd' ;
THIS IS A PARAGRAPH 1 ;
THIS IS A PARAGRAPH 1-1
CREATE CURRENT = 'cccc' ;
THIS IS A PARAGRAPH 2 ;
THIS IS A PARAGRAPH 2-2

결과는 다음과 같습니다

CREATE CURRENT = 'dddd' ;
THIS IS A PARAGRAPH 1 ;   
THIS IS A PARAGRAPH 1-1 
CREATE CURRENT = 'cccc' ;
THIS IS a PARAGRAPH 2
THIS IS a PARAGRAPH 2-2 ;

답변1

노력하다

awk '{ if ( $1 "x" != before "x" ) print ; before=$1 ; } ' file

어디

  • $1 "x" != before "x"첫 번째 필드의 이전 값을 사용하여 테스트
  • before "x"암시적 문자열 연결을 통해 초기화되지 않은 우선순위 값이 허용됩니다.
  • before=$1$1의 이전 값을 기억합니다.

OP의 편집 내용을 업데이트하십시오.

awk 'BEGIN {cc=0 } 
    /CREATE CURRENT/ { if ( !cc++) print ; else next ;} 
    {cc=0; print ;} '
  • 연속된 줄은 CREATE CURRENT한 번만 인쇄됩니다.
  • 다른 라인은 cc값을 다시 활성화합니다.
  • 새 줄을 추가 ' '하거나 모든 것을 한 줄에 넣을 수 있습니다.

답변2

나는 이것을 sed로 시도했고 작동합니다

sed '/^CREATE CURRENT/ { :a $! { N; /\nCREATE CURRENT/ { s/.*\n//; ba; }; }; }' file

이것이 결과이다

CREATE CURRENT = 'dddd' ;
THIS IS A PARAGRAPH 1 ;
THIS IS A PARAGRAPH 1-1
CREATE CURRENT = 'cccc' ;
THIS IS A PARAGRAPH 2 ;
THIS IS A PARAGRAPH 2-2

답변3

그것을 열려면 vi다음을 사용할 수 있습니다.

:%s/\(\(\_^CREATE CURRENT\).*\n\)\(\2.*\n\)*/\1/g

파일 끝에 줄이 있으면 파일 끝에 추가 줄 바꿈이 남을 수 있습니다 CREATE CURRENT. 그렇다면 를 사용하여 추가 줄을 제거할 수 있습니다 :$d.

만족스러우면 저장하거나 :x변경 사항을 취소하고 종료하세요.:q!


각 중복 세트의 첫 번째가 아닌 마지막을 유지하려면 다음을 사용하십시오.

:%s/\(\(\_^CREATE CURRENT\).*\n\)\+\(\2.*\n\)/\3/g

관련 정보