다음과 같은 데이터가 있습니다.
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