"sed -n"은 "p"를 사용할 때만 출력을 표시합니까?

"sed -n"은 "p"를 사용할 때만 출력을 표시합니까?
  • sed -n명령 처리 후의 결과만 표시됨을 의미하므로 결과를 표시하려면 'p'를 추가해야 합니다.
  • 그렇지 않으면 sed -n결과가 표시되지 않습니다

이게 옳은 거니?

sed [root@ljl ~]# cat a.txt 
1111simon111
simon2222222
333simon3333
444444444444
5555555simon
simon6666666
7777777simon
888888888888
[root@ljl ~]# sed -n 's/simon/lili/gp' a.txt
1111lili111
lili2222222
333lili3333
5555555lili
lili6666666
7777777lili
[root@ljl ~]# sed -n 's/simon/lili/g' a.txt
[root@ljl ~]# 

답변1

각 "루프"의 끝에서 편집 스크립트의 최종 명령 실행을 마치면 패턴 공간의 현재 내용을 인쇄하고 이를 현재 입력 파일의 다음 줄로 바꾸는 sed암시적 명령이 있습니다 . n그래서 스크립트는주기맨 위로 돌아갑니다.

해당 옵션으로 시작하면 이 명령(및 스크립트의 다른 명령 n)의 출력이 표시되지 않습니다.nsed-n

사용은 -n의미하지 않습니다모두출력이 sed억제됩니다. 예를 들어, r파일에서 텍스트를 읽고 이를 표준 출력으로 보내는 명령은 =현재 행 번호를 인쇄하는 명령과 마찬가지로 여전히 표준 출력에 출력을 생성합니다. 마찬가지로 텍스트를 추가, 삽입 및 변경하기 위한 명령 , 및 와 다양한 특정 방식으로 텍스트를 출력하기 위한 명령 , 및 는 a관계없이 출력을 생성합니다(이러한 명령의 특정 기능에 대해서는 설명서를 참조하세요). 오류 등은 자연스럽게 표준 오류에도 없는 것처럼 출력됩니다.iclP-nsed-n

또한 이 명령은 질문에서 언급한 플래그 ( )와 함께 사용된 명령 p과 마찬가지로 여전히 출력을 생성합니다.s///ps///p

명령이 패턴 공간을 버리고 즉시 다음 루프를 시작하면 d덜 일반적으로 사용되는 명령과 마찬가지로 항상 스크립트 끝의 암시적 항목을 건너뜁니다.nD

-nsed이 옵션은 스크립트 시작 부분에 사용 하여 #n스크립트 내에서 호출 할 수 있습니다.

예: 명령줄에서 사용되는지 여부에 관계 없이 sed하위 문자열이 포함된 행만 인쇄하는 스크립트 .HELLO-n

#n
/HELLO/p

첫 번째 줄에 있어야 합니다. 이 스크립트에서는 #n스크립트의 명시적 명령에 의해 인쇄되는 내용을 제외한 모든 줄의 인쇄가 억제됩니다.p

답변2

p예, 을 사용하는 경우 일치/수정된 라인을 인쇄하려면 을 사용해야 합니다 -n.

man sed(GNU 버전) 에서 :

-n, --조용함, --무음

패턴 공간의 자동 인쇄 억제

답변3

sed -n"명령 처리 결과만 표시한다"는 의미는 아닙니다. 이는 "명시적으로 요청한 경우에만 인쇄", 즉 "자동으로 인쇄하지 않음"을 의미합니다.

p일반적으로 명시적이고 무조건적으로 인쇄하려면 명령을 사용합니다 . 귀하의 경우에는 다음과 같습니다:

sed -n 's/simon/lili/g;p' a.txt

위의 구문은 사용한 구문이 아닙니다. 이것이 당신이 사용하는 것입니다:

sed -n 's/simon/lili/gp' a.txt

이것은 p( g수식어와 같은) 수식어 인데 s, 이는 "교체하면그런 다음 새 패턴 공간을 인쇄합니다." 해당 p명령과 마찬가지로 명시적인 인쇄 요청(그래서 유용함 -n)이지만 조건부입니다.

관련 정보