w 명령이나 플래그가 실행되지 않으면 sed가 파일을 생성할 수 있습니까?

w 명령이나 플래그가 실행되지 않으면 sed가 파일을 생성할 수 있습니까?

방금 내가 실행하면

echo foo|sed 's/x/u/w/tmp/bar'

GNU를 사용하면 sed빈 파일이 생성되는데 /tmp/bar, 이는 w플래그가 적용되지 않기 때문에 의도하지 않은 현상입니다. 더 나쁜,

echo foo|sed 'd;w/tmp/bar'

그 빈 파일도 생성되었습니다! 우후.

정말,GNU sed매뉴얼인정하다:

첫 번째 입력 줄을 읽기 전에 파일이 생성되거나 잘립니다.

모든 파일 핸들이 열려 있는지 테스트할 필요가 없다면 구현하기가 더 쉬울 것 같지만 POSIX 정의에서는 sed명령을 실행하지 않고 파일을 터치할 수 있다고 말하지 않습니다. --posixGNU로 전환해도 sed도움이 되지 않았습니다.

sed이 경우 다른 구현이 어떻게 작동하는지 알고 있습니까?

아니면 제가 여기서 기준을 잘못 이해하고 있는 걸까요?

답변1

sedGNU 구현은 명령 처리 w및 명령 w플래그 에 관한 POSIX 사양을 엄격하게 따릅니다 s. 다음 내용은 다음에서 가져온 것입니다.sed유틸리티 POSIX 사양의 자세한 설명 섹션:

업무 문서처리가 시작되기 전에 생성되어야 합니다.

w"wfile"은 w명령이나 명령의 플래그로 작성된 파일 입니다 s.

FreeBSD, macOS, OpenBSD 및 NetBSD에 있는 BSD 구현에는 "wfile"이 작성될 때까지 생성 또는 자르기를 지연하는 sed비표준 옵션이 있습니다 .-a

-a
w기본적으로 함수 인수로 나열된 파일은 처리가 시작되기 전에 생성되거나 잘립니다. 이 -a옵션을 사용하면 sed관련 기능이 포함된 명령이 w입력 라인에 적용될 때까지 각 파일을 여는 데 지연이 발생합니다.

관련 정보