O que a opção '-n' em sed faz?

8

Esta é a entrada da página man para -n :

-n

suppress automatic printing of pattern space

Eu noto que quando não usa -n para certas operações, cada linha é impressa em stdout (e as linhas solicitadas são impressas duas vezes):

$ 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

No entanto, esta lei não se aplica a outros comandos:

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

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

Então, o que o -n faz exatamente?

    
por dotancohen 14.12.2014 / 13:42

1 resposta

10

Normalmente, o sed processa cada linha (fazendo substituições, etc.) e imprime o resultado. Se o processamento envolver a linha impressa (por exemplo, o comando p do sed), ela será impressa duas vezes (uma vez durante o processamento e novamente pela impressão automática de pós-processamento). A opção -n desativa a impressão automática, o que significa que as linhas que você não especifica para imprimir não são impressas, e as linhas explicitamente informadas para impressão (por exemplo, com p ) são impressas apenas uma vez. / p>

  • sed -n '2,3p' test.txt - imprime apenas as linhas 2 a 3, conforme solicitado

  • sed '2,3p' test.txt - imprime cada linha (automaticamente) E TAMBÉM imprime as linhas 2-3 uma segunda vez

  • sed -n 's/t/T/' test.txt - substitui "t" por "T" em cada linha, mas não imprime o resultado devido a -n

  • sed 's/t/T/' test.txt - substitui "t" por "T" em cada linha e imprime automaticamente o resultado

E deixe-me adicionar mais alguns exemplos:

  • sed -n 's/t/T/p' test.txt - substitui "t" por "T" em cada linha, imprime APENAS linhas onde a substituição ocorreu (ou seja, não "segundo")

  • sed 's/t/T/p' test.txt - substitui "t" por "T" em cada linha, imprime linhas onde a substituição ocorreu e, em seguida, imprime automaticamente cada linha (resultado: "segundo" é impresso uma vez, todos os outros duas vezes)

  • sed '2,3p; 3p' test.txt - imprime as linhas 1, 4 e 5 uma vez (a impressão automática); linha 2 duas vezes (o primeiro comando p e depois a impressão automática) e a linha 3 três vezes (uma vez para cada comando p , depois novamente automaticamente).

por 14.12.2014 / 19:35