sed와 '>'에 대한 혼란

sed와 '>'에 대한 혼란

다음 명령은 잘 작동합니다.

sed s/input/raw_input/ p.py >p2.py && mv p2.py p.py

그러나 다음 명령은 p.py를 빈 파일로 변환합니다.

sed s/input/raw_input/ p.py >p.py

다음은 또한 p.py를 빈 파일로 변환합니다.

sed s/input/raw_input/ p.py | cat > p.py

마지막 두 명령이 예상대로 작동하지 않는 이유는 무엇입니까? 특히 p.py가 비어 있는 이유는 무엇입니까?

답변1

이는 리디렉션 연산자가 >명령보다 먼저 호출되어 다음 순서가 발생하기 때문입니다.

  1. p.py쓰기용으로 열고 앞의 모든 내용을 자릅니다.
  2. sedp.py이제 비어 있는 명령을 실행하기 위해 호출됩니다.
  3. 출력(아무것도 없음)이 기록됩니다 p.py(아직 아무것도 포함하지 않음).

코드의 이식성을 원하는 정도에 따라 두 가지 옵션이 있습니다.

휴대용이 아님

GNU 옵션을 사용한 sed -i내부 편집

가지고 다닐 수 있는

출력을 임시 파일로 리디렉션한 다음 sed완료되면 임시 파일을 원본 파일 위로 이동합니다.

관련 정보