정규식과 일치하는 sed 저장 라인의 -i 옵션은 어디에 있습니까?

정규식과 일치하는 sed 저장 라인의 -i 옵션은 어디에 있습니까?

내 서버 하드 드라이브의 공간을 확보하려고 sed를 사용하여 로그 파일의 이전 날짜를 일치시켰더니 줄어들었지만 내 루트 파티션은 이전에 사용했던 91 대신 이제 98%의 공간을 사용하고 있습니다. %sed에게 전화했어요. 이렇게 했는데 sed -i '/^Jan/ d' file.log로그 파일이 6G에서 400M로 줄었습니다. 임시 파일이나 이와 유사한 파일을 검색하려고 하는데 find / -size +1G새 파일과 일치하지 않습니다. 편집하다:echo -n > file.log서비스 충돌을 피하기 위해 이렇게 했지만 문제가 여전히 존재하므로 이는 일시적인 현상일 뿐입니다.

답변1

sed의 옵션은 --in-place실제로 파일을 그 자리에서 편집하지 않으므로 다음과 같습니다.

if sed ... input > /tmp/output$$ ; then
    mv /tmp/output$$ input
else
    rm /tmp/output$$
fi

이는 명령을 실행하기 mv전에 디스크의 입력 파일 크기를 두 배로 늘릴 수 있음을 의미합니다. 파일 시스템이 가득 차면 매우 비효율적이 됩니다.

더 큰 문제는 디스크 공간이 부족하거나 /var/log 및 /tmp를 /와 동일한 파티션에 마운트하고 /가 작은 파티션에 있는 경우 이를 채우는 것입니다. 지금 그리고 다음 일주일 전체와 그 다음 주 등등.

디스크가 어떻게 설정되어 있는지 확인 하세요 mount. 당신이 필요로 할:df /tmpdf /var/log

  1. 디스크 설치 복구
  2. 더 큰 디스크를 구입하세요
  3. 조사logrotate
  4. 너무 많이 기록하지 마세요
  5. 또는 위의 조합

답변2

sed -i에서 strace를 실행하면 임시 파일의 위치가 명확하게 표시됩니다. 그러나 가장 쉬운 방법은 -i를 사용하지 않는 것입니다. 공간이 있는 파티션의 파일로 출력을 리디렉션합니다.

관련 정보