저는 공개 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
파일을 읽기 전에 파일을 자르라는 지시를 받는다는 것을 의미합니다. 쉘 리디렉션을 사용하면 이 문제를 해결할 수 없습니다.