'n'
(next) If auto-print is not disabled, print the pattern space,
then, regardless, replace the pattern space with the next line of
input. If there is no more input then 'sed' exits without
processing any more commands.
A opção -n
desativa a autoprint.
Você substituiu #
por =
na primeira linha com #
(o espaço padrão). O espaço padrão foi impresso por n
porque não havia a opção -n
. Em seguida, o espaço de padrão foi substituído pela próxima linha, em seguida, passamos para n
, o que causou a impressão do espaço de padrão porque a autoprint não foi desativada e, em seguida, não houve mais linhas de entrada, portanto sed
. / p>
Talvez seja mais claro usar -n
e adicionar p
ao seu loop:
$ sed -n '/#/ {s//=/; :k n;p; bk}' rgb
UPPER (#2): "RED GREEN BLUE"
após n
, p
forçar a impressão de todos, exceto da primeira linha.
$ sed -n '/#/ {s//=/; :k p;n; bk}' rgb
lower (=1): "red green blue"
UPPER (#2): "RED GREEN BLUE"
antes de n
, p
força o espaço de padrão a ser impresso toda vez. n
nunca imprime nada, porque a autoprint está desativada.
Tente remover a opção -n
com o comando p
em posições diferentes no loop.
Se você quiser imprimir apenas uma linha depois de alterá-la, use q
:
$ sed '/#/ s//=/;q' rgb
lower (=1): "red green blue"