경고 : 이것은 위험한 방법입니다! 그것은 리눅스에서 i / o 버퍼를 남용하고 특정 버퍼링 옵션으로 작은 파일에서 작동하도록 관리합니다. 흥미로운 호기심입니다.그러나 실제 상황에서는 사용하지 마십시오!
당신 의 -i
옵션 외에도sed
tee
유틸리티를 .
에서 man
:
티-표준 입력에서 읽고 표준 출력 및 파일에 쓰기
따라서 해결책은 다음과 같습니다.
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee | tee index.html
-여기서는 tee
파이프 라인이 버퍼링되도록하기 위해 반복됩니다. 그런 다음 파이프 라인의 모든 명령이 입력을받을 때까지 차단됩니다. 파이프 라인의 각 명령은 업스트림 명령이 1 바이트의 버퍼를 쓰면 시작됩니다 (크기는 어딘가에 정의 됨) 의 입력에 )를 . 마지막 명령tee index.html
쓰기 위해 파일을 열어서 비우는 은 업스트림 파이프 라인이 완료되고 파이프 라인 내의 버퍼에 출력 된 후에 실행됩니다.
다음이 작동하지 않을 가능성이 높습니다.
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee index.html
-차단없이 파이프 라인의 두 명령을 동시에 실행합니다. (파이프 라인을 차단하지 않고 버퍼에 의해 대신 버퍼의 라인으로 바이트 라인을 통과해야한다. 실행할 때와 동일합니다 cat | sed s/bar/GGG/
. 더 상호 작용 그리고 바로이 명령 일반적으로 파이프 라인 버퍼링 및 차단없이 실행을 중단하지 않고. 긴 파이프 라인 버퍼링하십시오.) tee index.html
의 뜻을 쓰기 위해 파일을 열면 비워집니다. 그러나 버퍼링을 항상 켜면 두 번째 버전도 작동합니다.
perl -pi -w -e 's/STRING_TO_REPLACE/REPLACE_WITH/g;' index.html