Estou lutando com um problema sed
no bash que ocorre no macOS e no Ubuntu. Durante uma longa sessão de depuração, apontei para este exemplo mínimo:
echo "abcde" | sed 's/.*/x/'
o que resulta em:
x
O que faz sentido, pois o regex in sed
substitui qualquer entrada por x
.
De forma similar:
echo "" | sed 's/.*/x/'
x
echo "-a" | sed 's/.*/x/'
x
Et cetera. No entanto:
echo "-n" | sed 's/.*/x/'
Observe que a saída agora está vazia .
O que está acontecendo? Por que "-n"
uma entrada deve ser sed
tratada de maneira diferente de qualquer outra (ou nenhuma) entrada?
É o
echo
, nãosed
.Você pode examinar a saída com, por exemplo,
hexdump -cx
.Para o
echo a
, você obterá a saídaa
e uma nova linha\n
ou 0x0a.Agora, como a string está vazia, você obtém apenas uma nova linha.
-n
meios paraecho
não emitir a nova linha à direita. Então, agora você não tem nenhuma string para ecoar e nenhuma nova linha anexada. Portanto, absolutamente nada.echo
não tem opção-a
, então o-a
é interpretado como uma string para ecoar e não como uma opção.Então, com
$
o prompt: