Linux

sed - 쉘에서 파일 내용 일부 삭제

비번변경 2021. 7. 26. 22:03
sed; stream editor
문자열을 필터링하고 변환하는 스트림 편집기

 

디스크 사용량이 너무 많아서 확인해보니, 로그 파일 하나가 20GB, 30GB가 넘어가고 있었다.

확인해보니 일정 시간 간격으로 로그 파일을 생성하는 게 아니라, 하나의 파일에 로그를 계속 쌓고 있는 상황이다. 정리는 하되 최신 파일 내용을 남겨두어야 하는데 용량이 너무 커서 에디터로 열리지도 않는다. ……도대체 누가 왜 이렇게 한 걸까?

 

아무튼 그게 급한 게 아니고, 에디터로 편집하는 게 아니라 명령어로 파일 처음부터 어디까지만 삭제할 수는 없을까? 다급하게 찾아보았더니 다행히 sed 명령을 사용하는 방법이 있었다.

 

sed -i '1, 10000d' <FILE_PATH>
# -i : 출력 결과를 원본 파일에 저장

 

sed 명령은 기본적으로 원본 파일을 변경하지 않고 터미널에 결과를 출력한다. 하지만 -i 옵션을 사용하면 결과를 원본 파일에 저장할 수 있다. 1, 10000d는 1번째 줄부터 10000번째 줄까지 제외한다는 의미다.

 

다만 임시파일을 생성하여 기존 파일에 덮어쓰는 방식인지 디스크 용량의 여유가 있어야 하는 것 같다.

참고로 3,000,000 줄 정도 삭제하면 5GB 정도 날릴 수 있다.

 

그럼, 이만 디스크 정리하러……

 

참고 문서

https://jhnyang.tistory.com/287

728x90