다음 명령은 잘 작동합니다.
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
이는 리디렉션 연산자가 >
명령보다 먼저 호출되어 다음 순서가 발생하기 때문입니다.
p.py
쓰기용으로 열고 앞의 모든 내용을 자릅니다.sed
p.py
이제 비어 있는 명령을 실행하기 위해 호출됩니다.- 출력(아무것도 없음)이 기록됩니다
p.py
(아직 아무것도 포함하지 않음).
코드의 이식성을 원하는 정도에 따라 두 가지 옵션이 있습니다.
휴대용이 아님
GNU 옵션을 사용한 sed -i
내부 편집
가지고 다닐 수 있는
출력을 임시 파일로 리디렉션한 다음 sed
완료되면 임시 파일을 원본 파일 위로 이동합니다.