Esta é a entrada da página de manual para -n
:
-n
suprimir a impressão automática do espaço do padrão
Percebo que, quando não está sendo usado -n
para determinadas 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 -n
faz exatamente?
fonte
-n
imprime todas as linhas, além daquelas solicitadas especificamente. Assim, nesse caso,-n
suprime a impressão de cada linha analisada . No entanto, no terceiro e quarto exemplos, o comportamento é diferente. Nesses casos, sed sem-n
não gera as linhas duas vezes, portanto, o uso-n
não suprime a impressão de todas as linhas analisadas, mas suprime a impressão de linhas não alteradas . Estou tendo dificuldade em generalizar quando o comportamento será um ou outro.-n
está fazendo exatamente a mesma coisa: alternar de cada linha impressa automaticamente (e o modificadorp
ep
para um comando substituto fazem com que a linha seja impressa mais vezes) para um modo em que as linhas são impressas apenas se você especificar especificamente para (com op
comando etc).-n
opção AND TAMBÉM adicionar; p
ao comando sed (por exemplosed -n '2,3p; p'
, e você obterá os mesmos resultados que obteria sem os dois. Isso-n
suprime a impressão automática padrão e; p
adiciona uma explícita (principalmente equivalente )