sed의`-n` 옵션은 무엇을합니까?


13

다음에 대한 매뉴얼 페이지 항목입니다 -n.

-엔

패턴 공간의 자동 인쇄 억제

I 때 통지 하지 하여 -n특정 작업을 위해, 각각의 라인은 표준 출력 인쇄 (요청 된 라인이 회 인쇄) :

$ cat test.txt 
first
second
third
fourth
fifth

$ sed -n '2,3p' test.txt 
second
third

$ sed '2,3p' test.txt 
first
second
second
third
third
fourth
fifth

그러나이 법은 다른 명령에는 적용되지 않습니다.

$ sed -n 's/t/T/' test.txt 

$ sed 's/t/T/' test.txt 
firsT
second
Third
fourTh
fifTh

그래서 무엇을 않습니다 -n정확히 무엇입니까?

답변:


17

일반적으로 sed는 각 행을 처리하고 (대체 등) 결과를 인쇄합니다. 처리에 행이 인쇄되는 경우 (예 : sed의 p명령), 처리 중 한 번, 자동 후 처리 인쇄로 다시 두 번 인쇄됩니다. 이 -n옵션은 자동 인쇄를 비활성화합니다. 즉, 인쇄하도록 구체적으로 지시하지 않은 행은 인쇄되지 않으며, 명시 적으로 인쇄하도록 지시 한 행 (예 p:)은 한 번만 인쇄됩니다.

  • sed -n '2,3p' test.txt -요청에 따라 2 ~ 3 행만 인쇄

  • sed '2,3p' test.txt -각 줄을 (자동으로) 인쇄하고, 라인 2-3을 다시 한 번 인쇄합니다.

  • sed -n 's/t/T/' test.txt -각 줄에서 "t"를 "T"로 바꾸지 만 다음과 같은 이유로 결과를 인쇄하지 않습니다. -n

  • sed 's/t/T/' test.txt -각 줄에서 "t"를 "T"로 바꾸고 결과를 자동으로 인쇄합니다

그리고 몇 가지 예를 더 추가하겠습니다 :

  • sed -n 's/t/T/p' test.txt -각 줄에서 "t"를 "T"로 대체하고 대체가 발생한 행만 인쇄합니다 (예 : "second"가 아님).

  • sed 's/t/T/p' test.txt -각 줄에서 "t"를 "T"로 바꾸고 대체가 발생한 줄을 인쇄 한 다음 각 줄을 자동으로 인쇄합니다 (결과 : "두 번째"가 한 번 인쇄되고 다른 모든 두 번 인쇄).

  • sed '2,3p; 3p' test.txt-라인 1, 4 및 5를 한 번 인쇄합니다 (자동 인쇄). 라인 2를 두 번 (첫 번째 p명령 다음 자동 인쇄), 라인 3을 세 번 (각 p명령 에 대해 한 번 , 다시 자동으로) 행하십시오.


고든에게 감사하지만 당신의 평가는 나의 관찰을 반복합니다. 처음 두 가지 예에서 sed -n는 특별히 요청 된 행 외에 모든 행을 인쇄합니다. 따라서이 경우 -n 구문 분석 된 모든 행의 인쇄가 억제 됩니다. 그러나 세 번째와 네 번째 예에서는 동작이 다릅니다. 나오지 않고 이러한 경우에 -n따라서 사용하지 번 출력 선을 수행 -n하지 않고 분석 모든 행의 인쇄를 억제 할 뿐만 아니라 라인의 인쇄가 변경되지 억제한다 . 동작이 언제 다른 것인지를 일반화하는 데 어려움이 있습니다.
dotancohen

아니요, 두 경우 모두 -n똑같은 일을하고 있습니다 : 자동으로 인쇄되는 모든 줄에서 ( pp수정자를 대체 명령 으로 바꾸면 줄이 추가로 인쇄 됩니다) 특별히 말한 경우 에만 줄이 인쇄되는 모드로 전환 됩니다 ( p명령 등으로).
Gordon Davisson

또 다른 방법으로 넣으십시오 : -n옵션을 추가 ; p하고 sed 명령에 추가 하십시오 (예를 들어 sed -n '2,3p; p', 당신은 없이도 동일한 결과를 얻을 수 있습니다.) -n기본 자동 인쇄를 억제하고 ; p명시 적으로 추가합니다 (주로 동등한 ) 인쇄
Gordon Davisson

나는 지금, 감사합니다 참조하십시오. 시간을내어 모범을 보이도록 도와 주셔서 감사합니다. 훌륭한 주를 보내십시오!
dotancohen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.