입력이 STDIN에서 오는 한 sed 자체가 텍스트 파일 형태로 출력을 생성할 수 있습니까?

입력이 STDIN에서 오는 한 sed 자체가 텍스트 파일 형태로 출력을 생성할 수 있습니까?

제목 내용: 1sed 에서 읽는다고 가정하면 출력이 텍스트 파일이 될 수 있습니까? 분명히 말하면 와 같은 셸 연산자를 사용하거나 와 같은 도구를 사용하여 출력을 텍스트 파일에 저장하는 것에 대해 말하는 것이 아닙니다 . 여기서 질문은 다음과 같습니다.STDIN
sed>>>tee
sed 홀로출력물을 텍스트 파일 형태로 제작할 수 있나요? 그렇다면 어떤 상황에서 제작되나요?


1: 이는 이를 지원하는 구현을 사용하여 텍스트 파일을 내부에서 편집하는 것을 배제하기 위한 것입니다.

답변1

예, w명령을 사용하거나 명령 w의 플래그를 s모두 사용하십시오.POSIX에 의해 지정됨.

예를 들어,

sed -n 'w output.txt'

표준 입력에 입력된 모든 내용은 sed에 기록되지만 표준 출력 output.txt에는 아무것도 출력되지 않습니다 (이 옵션 sed덕분에 ). -n이는 패턴 공간을 쓰기 전에 패턴 공간에서 작동하기 위해 다른 명령과 함께 사용할 수 있습니다.

몇 가지 경고 및 제안:

파일 이름이 공백으로 시작하는 경우 접두사를 사용하십시오 ./.

sed -n 'w ./ output with blanks.txt'

sed파일 이름에 개행 문자 POSIXly가 포함된 경우 백슬래시로 이스케이프할 수 있습니다. 단, 모든 구현 에서 작동하지는 않습니다 (특히 GNU sed또는 busybox 에서는 작동하지 않음 sed).

sed -n 'w ./output\
with\
newline.txt'

백슬래시 문자가 포함된 경우 일부 구현에서는(위의 POSIX는 파일 이름에 줄 바꿈을 지원함) 백슬래시를 사용하여 이스케이프해야 합니다.

sed -n 'w file\\with\\backslash.txt' # POSIX
sed -n 'w file\with\backslash.txt'   # GNU

또한 입력이 비어 있거나 명령이 w실행되지 않더라도 출력 파일은 다음과 같이 생성되거나 잘립니다.

sed 'd;w file'

또는

seq 20 | sed '/21/ w file'

awk이러한 문제를 피하기 위해 대신 사용할 수 있습니다.

FILE=arbitrary-file-name awk '/100/ {print > ENVIRON["FILE"]}'

관련 정보