명령에서 파일을 사용하고 출력을 자르지 않고 동일한 파일로 리디렉션하려면 어떻게 해야 합니까? [복사]

명령에서 파일을 사용하고 출력을 자르지 않고 동일한 파일로 리디렉션하려면 어떻게 해야 합니까? [복사]
cat package.yaml > package.yaml

위의 내용은 잘려서 package.yaml파일이 비어 있게 됩니다. 즉, cat빈 출력이 됩니다.

파일 잘림을 방지하는 방법은 무엇입니까? 임시 파일을 사용하는 것 외에 다른 방법은 없나요? 어쩌면 변수일까요?

답변1

파일의 내부 편집을 허용하는 모든 유틸리티는 내부적으로 결과를 임시 파일에 쓴 다음 작업이 완료된 후 원본 파일을 해당 임시 파일로 바꾸는 방식으로 이를 수행합니다.


문서할 수 있는내부 수정이 가능하지만 기존 데이터를 덮어쓰거나 파일 길이를 연장하는 것만 가능합니다. 이는 dd다음과 같은 유틸리티를 사용하여 수행할 수 있습니다.

$ cat file.txt
hello world
abc abc 123 123

$ cat insert.txt
hello!

$ dd if=insert.txt of=file.txt bs=1 seek=6 conv=notrunc
7+0 records in
7+0 records out 
7 bytes transferred in 0.000 secs (30918 bytes/sec)

$ cat file.txt
hello hello!
bc abc 123 123

여기서는 insert.txt먼저 파일에서 6바이트 앞을 보고(공백 건너뛰기) 내용을 수정하여 내용을 삽입합니다. 쓰기 작업이 끝날 때 출력 파일이 잘리는 것을 방지합니다.file.txthelloconv=notrunc

생략 하면 if=insert.txt키보드를 통해 어떤 텍스트라도 삽입할 수 있습니다. 여기서 "삽입"은 실제로 잘못된 용어입니다. "덮어쓰기"가 무슨 일이 일어나고 있는지에 대한 더 나은 설명일 수 있습니다(끝에 개행 문자가 두 번째 줄의 첫 번째 문자를 덮어쓰는 것을 참조하세요 insert.txt).

하지만 이런 식으로 파일을 편집하고 싶지는 않습니다.

관련 정보