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

관련 정보