Substituir o avanço de linha por um caractere

0

Eu quero substituir \ n por um caractere.

echo -n  "s\n" |tr  "\n"  "a"
s\n

Por que não é possível obter sa como resultado?

    
por it_is_a_literature 03.04.2017 / 05:18

1 resposta

2

De man echo :

-e enable interpretation of backslash escapes

Seu eco pode ser um shell embutido (tente type echo ). Em caso afirmativo, use help echo em vez de man echo . Mas deveria dizer o mesmo sobre a opção -e .

Sem essa opção, a string \n é impressa literalmente, não como um avanço de linha. Aviso tr não precisa de nenhuma opção especial para funcionar conforme o esperado.

Comando fixo:

echo -ne  "s\n" | tr  "\n"  "a"

O colega Gordon Davisson apontou algumas coisas. Eles parecem importantes o suficiente para incluí-los em minha resposta para referência futura. A partir deste ponto, todo o crédito vai para Gordon .

Different versions of echo are very inconsistent with respect to escapes and options. Some will interpret escape sequences without -e. Some will print "-e" as part of their output. Some do… other things. For things like this, use printf instead (as in printf "s\n"). See the POSIX spec for echo, especially the "application usage" section.

    
por 03.04.2017 / 06:51

Tags