sed: -n 스위치를 사용하는 대신 스크립트 파일을 통해 자동 인쇄를 비활성화하는 방법은 무엇입니까?

sed: -n 스위치를 사용하는 대신 스크립트 파일을 통해 자동 인쇄를 비활성화하는 방법은 무엇입니까?

명령줄과 스크립트 파일 인터페이스 간 전환에 대해 혼란스럽습니다. 작동하는 명령줄에 멋진 스크립트를 작성했지만 이를 .sed 파일에 저장하려고 하면 더 이상 -n.sed 파일을 사용할 수 없다는 것을 기억합니다. "!d" 플래그를 사용해 보았으나 동일한 결과가 나오지 않았습니다. 내 질문:
이것을 .sed 파일에 넣는 방법이 있습니까 -n, 아니면 스크립트 파일 인터페이스에 있을 때 자동 인쇄를 중지하는 다른 방법이 있습니까? 스크립트를 셸에서 보호하는 것에서 보호하지 않는 것으로 전환하는 것이 싫지만, 우회할 방법이 없을 것 같나요?

답변1

표준(POSIX) 방법은 #n스크립트 시작 부분에 있습니다. 이는 스크립트의 처음 2바이트여야 합니다.

이는 실행 중인 스크립트에만 사용할 수 있는 she-bang의 사용을 배제하지만 sed -f the-script(she-bangs는 POSIX가 아니며 POSIX는 유틸리티에 대한 경로를 지정하지 않음) @Kusalananda가 말했듯이 she -bang을 사용할 때 다음은 항상 가능합니다.

#! /path/to/sed -nf

sed매개변수(대부분)를 사용하여 셔뱅을 지원하는 시스템에서 실행 가능한 스크립트를 만들고 싶은 경우 .

#n다음과 같이 명령줄에서도 작동합니다 .

sed '#n
  s/foo/bar/p'

'좋아요' 뒤에 텍스트를 더 추가할 수 있습니다.

#no default output
s/foo/bar/p

또는:

#nifty way to turn -n on
s/foo/bar/p

사실, -n실수로 열리지 않도록 기억해야 할 사항입니다. #이러한 이유로(및 가독성을 위해) 주석 뒤에 공백을 사용하는 것이 좋습니다.

# no, I don't want to turn -n on
s/foo/bar/

답변2

sed [-e] 'command'그리고 sed -f /path/to/script스위치 -n는 정확히 같은 방식으로 작동합니다. sed스크립트를 실행 하고 "기본 인쇄" 동작을 끄려면 를 사용하십시오 sed -n -f /path/to/script.sed /path/to/input.

답변3

sed다음 명령을 사용하여 스크립트를 실행 해야 합니다.

$ sed -n -f script.sed

또는 #!스크립트의 ("hash-bang") 줄을 다음과 같이 변경하세요.

#!/usr/bin/sed -nf

그리고 그것을 실행

$ ./script.sed

관련 정보