덮어쓰지 않고 Linux에서 동일한 파일을 읽고 쓸 수 있습니까? [복사]

덮어쓰지 않고 Linux에서 동일한 파일을 읽고 쓸 수 있습니까? [복사]

중복 가능성:
iconv가 입력 파일을 변환된 출력으로 바꾸도록 하려면 어떻게 해야 합니까?


저는 공개 DNS 이름()을 사용하여 Amazon ec2에 자주 연결하므로 ec2-12-34-56-78.compute-1.amazonaws.com, 다시는 사용하지 않을 항목으로 known_hosts파일이 넘쳐납니다 .ec2

sed -i내부 편집을 사용할 수 있다는 것을 알고 있지만 grep그렇게 하고 싶었습니다.

grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts

known_hosts그러면 빈 파일이 남게 됩니다 . 만약 내가한다면:

grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/tmp
mv ~/.ssh/tmp ~/.ssh/known_hosts

grep모든 것이 괜찮지만 왜 동일한 파일을 읽고 쓸 때 공백이 남는지, 를 cat사용할 때 해결 방법이 있는지 등이 혼란스럽습니다.

답변1

라는 유틸리티가 있습니다 sponge.더 많은 유틸리티모음곡. 이 목적을 위해 만들어졌습니다.

grep -v ec2 ~/.ssh/known_hosts | sponge ~/.ssh/known_hosts

답변2

리디렉션은 명령이 실행되기 전에 쉘에 의해 수행됩니다. 이는 쉘이 grep파일을 읽기 전에 파일을 자르라는 지시를 받는다는 것을 의미합니다. 쉘 리디렉션을 사용하면 이 문제를 해결할 수 없습니다.

관련 정보