방금 내가 실행하면
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
명령을 실행하지 않고 파일을 터치할 수 있다고 말하지 않습니다. --posix
GNU로 전환해도 sed
도움이 되지 않았습니다.
sed
이 경우 다른 구현이 어떻게 작동하는지 알고 있습니까?
아니면 제가 여기서 기준을 잘못 이해하고 있는 걸까요?
답변1
sed
GNU 구현은 명령 처리 w
및 명령 w
플래그 에 관한 POSIX 사양을 엄격하게 따릅니다 s
. 다음 내용은 다음에서 가져온 것입니다.sed
유틸리티 POSIX 사양의 자세한 설명 섹션:
각업무 문서처리가 시작되기 전에 생성되어야 합니다.
w
"wfile"은 w
명령이나 명령의 플래그로 작성된 파일 입니다 s
.
FreeBSD, macOS, OpenBSD 및 NetBSD에 있는 BSD 구현에는 "wfile"이 작성될 때까지 생성 또는 자르기를 지연하는 sed
비표준 옵션이 있습니다 .-a
-a
w
기본적으로 함수 인수로 나열된 파일은 처리가 시작되기 전에 생성되거나 잘립니다. 이-a
옵션을 사용하면sed
관련 기능이 포함된 명령이w
입력 라인에 적용될 때까지 각 파일을 여는 데 지연이 발생합니다.