리눅스에서 동일한 파일을 수정할 때 조심해야 한다.

input과 output이 동일한 파일일 때.. cat, cp, mv 은 다음 아래가 발생한다. 



$ cat > 1

11111


$ cat 1 > 1

cat: 1: input file is output file


$ cp 1 1

cp: `1' and `1' are the same file



$ mv 1 1

mv: `1' and `1' are the same file





sed 의 경우는 에러가 발생하지 않는다.  당연하게도 시스템적으로는 맞지만..

context 적인 오류를 범할 수 있다. 


1의 내용을 모두 2로 바꾸고 싶다면, 아래와 같이 쓸 수 있는데, 이 부분은 잘못된 결과를 발생하게 된다. 


$ sed -i -e 's/1/2/g' 1 > 1

$ cat 1

(없음)




아래와 같이 sed 명령어의 -i 옵션을 추가하면 바로 수정이 된다. 

$ sed -i -e 's/1/2/g' 1

$ cat 1

22222







Posted by '김용환'
,