일치하는 키워드가 발견되면 위 줄을 삭제하세요.

일치하는 키워드가 발견되면 위 줄을 삭제하세요.

다음과 같은 데이터가 있습니다.

Amit:   
  Mem  30  40 50  
Sumit:  
  Mem  50 70 80   
Tarun:  
Nishant:  
  Mem  90 20 45    

"Tarun:"에 표시된 대로 Mem이 존재하지 않으므로 삭제해야 합니다.

최종 출력은 다음과 같아야합니다

Amit:   
  Mem  30  40 50   
Sumit:   
  Mem  50 70 80   
Nishant:   
  Mem  90 20 45     

이 문제를 해결하도록 도와주세요. 시도했지만 원하는 결과를 얻을 수 없습니다.

답변1

$ sed '$!N;/\n  Mem/p;D' file
Amit:
  Mem  30  40 50
Sumit:
  Mem  50 70 80
Nishant:
  Mem  90 20 45
  • $!N: 마지막 줄이 아닌 각 줄에 대해 사이에 구분 줄 바꿈을 사용하여 다음 줄을 버퍼에 추가합니다.

  • /\n  Mem/p: 버퍼에 개행 문자와 문자열   Mem(두 개의 공백의 합 Mem)이 포함되어 있으면 버퍼를 인쇄합니다. [[:blank:]]*줄 시작 부분에 공백이나 탭을 원하는 만큼 남겨두기 위해 두 개의 공백을 사용할 수도 있습니다 Mem.

  • D: 버퍼의 첫 번째 개행 문자 앞의 데이터를 삭제하고 다음 루프를 시작합니다.

답변2

이것은 일반 코드이며 Mem만 존재하며 이전 줄을 인쇄합니다.

awk '{a[++i]=$0}/Mem/{for(x=NR-1;x<=NR;x++)print a[x]}' file

산출

Amit:   
  Mem  30  40 50  
Sumit:  
  Mem  50 70 80   
Nishant:  
  Mem  90 20 45    

관련 정보