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