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똑같은 일을하고 있습니다 : 자동으로 인쇄되는 모든 줄에서 ( p및 p수정자를 대체 명령 으로 바꾸면 줄이 추가로 인쇄 됩니다) 특별히 말한 경우 에만 줄이 인쇄되는 모드로 전환 됩니다 ( 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.