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

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

다음 내용이 포함된 로그 파일이 있습니다.

 #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}'여전히 결과를 얻을 수 없습니다.

참고: 데이터가 많을수록 파일에 더 많은 내용이 포함됩니다. 이러한 유형의 줄은 파일의 어느 위치에나 위치할 수 있습니다.

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

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

관련 정보