파일에서 패턴을 삭제하고 끝에 추가하시겠습니까?

파일에서 패턴을 삭제하고 끝에 추가하시겠습니까?

아래와 같은 내용을 포함하는 로그 파일이 있습니다.

 #SOME MORE DATA 
These switches don't have latest images :
SWEs-elmPCI-A-01#
 #SOME MORE DATA     
These switches don't have latest images :
SWEs-elmPCI-B-01#
 #SOME MORE DATA    
These switches don't have latest images :
SWEs-elmPCI-C-01#
 #SOME MORE DATA     
These switches don't have latest images :
SWEs-elmPCI-D-01#
 #SOME MORE DATA    
These switches don't have latest images :
SWEs-elmPCI-B-01#
 #SOME MORE DATA 

파일에서 이러한 줄을 모두 삭제하고 다음과 같은 방식으로 파일 끝에 추가하고 싶습니다.

#ALL the remaining data at top
These switches don't have latest images :
SWEs-elmPCI-A-01#
SWEs-elmPCI-B-01#
SWEs-elmPCI-C-01#
SWEs-elmPCI-D-01#
SWEs-elmPCI-B-01#

사용하려고 생각하고 있지만 sed -n '/These*/{n;p}'여전히 결과를 얻을 수 없습니다.

참고: SOME MORE DATA는 파일에 더 많은 내용이 있음을 의미하며 이러한 유형의 줄은 파일의 어느 위치에나 있을 수 있습니다.

These switches don't have latest images :
SWEs-elmPCI-B-01#

답변1

sed -ne '/^These/{n;w tempfile
d;};p' < oldfile > newfile
echo "These switches don't have latest images :" >> newfile
cat tempfile >> newfile

임시 파일 대신 보관 공간을 사용할 수 있습니다.

sed -ne '/^These/{n;H;d;};p;${x;s/^/These switches don'"'"'t have latest images :/;p;}' < oldfile > newfile

그러나 파일이 "SOME MORE DATA"가 아닌 "이 스위치" 블록 중 하나로 끝나면 실패합니다. 그 이유는 ${x;....p;}이전에 명령으로 마지막 줄을 삭제하지 않은 경우에만 마지막 명령이 실행되기 때문입니다 d. 임시 파일을 피하려면 Perl이나 Python을 사용하는 것이 더 나을 것입니다. 확실히 더 읽기 쉽습니다.

관련 정보