> file
이것이 구체적 이지 않고 파일 sed
에 쓰는 것이라는 것을 알고 있지만 옵션 과 어떻게 비교됩니까 ? 매뉴얼 페이지를 읽었지만 그것이 무엇을 의미하는지 이해하지 못합니다. 이 옵션 중 정말 더 나은 것이 있나요? 어느 것이 더 빠르나요? 더 적은 메모리가 필요합니까? 추가적인 통찰력이 있으면 공유해 주세요.stdout
sed
-i
in-place
답변1
"내부"는 작업이 이미 점유된 공간(예: 디스크 공간 또는 메모리)을 사용하고 추가 리소스가 필요하지 않음을 의미합니다. 이 경우에는 제공되는 내용을 고수하는 것이 중요합니다 file
.
가장 큰 장점 은 이름이 여전히 인 파일에서 출력을 sed -i -e '…' file
읽고 저장할 수 있다는 것입니다 . 이는 동일한 파일처럼 보이지만 그 배경에는 있습니다.file
file
그렇지 않다. 기본적으로 sed
지정된 파일을 읽고, 처리된 출력을 임시 파일로 이동하고, 임시 파일을 원래 파일을 대체하여 원래 이름으로 이동합니다.
그래서 이것은 아니다엄격하게다른 파일이 필요하고 어느 시점에 당신이 가지고 있기 때문에 "제자리에"둘파일이지만 결과는 거의 제자리에 있는 것과 같습니다. 별도의 파일에 쓰기장점이 있습니다:
파일의 이전 버전은 자동으로 최신 버전으로 대체되므로 각 시점에서 파일 이름은 파일의 유효하고 완전한 버전을 가리킵니다.
반면에 sed -e '…' file >file
그렇게 많지는 않습니다. 더 나쁜 것은 file
콘텐츠가 손실된다는 것입니다. 동작은 다음과 같이 설명됩니다.파이프를 원래 위치로 다시 구부립니다.. >
이렇게 하면 -i
데이터가 손실될 수 있습니다.
답변2
그것은 모두 당신이 원하는 것에 달려 있습니다. 그러나 파이프는 일반적으로 매우 빠르며 IO 버퍼만 사용합니다.
-나파일 편집을 위한 비표준 옵션입니다제자리에.sed 그렇지 않으면 표준 입력의 데이터를 표준 출력으로 변환합니다.
내 컴퓨터에서는 1MB 파일의 속도 차이를 느끼지 못했습니다.
$ cat my_file.txt
This is my file
$ sed -i "" s/my/your/g my_file.txt
$ cat my_file.txt
This is your file
$