Use o eco in-line:
$ echo -e "line1\n\nline2\nline3"
line1
line2
line3
Digamos que eu tenha um texto "line1 \ n \ nline2 \ nline3" e quero vê-lo em um console ou canalizá-lo para um editor de texto para que pareça
line1
line2
line3
Então personagens especiais foram avaliados. Posso fazer isso sem regex substituindo?
O Bash tem printf
embutido, com suporte para %b
para expandir barras invertidas e para %q
formatar uma string para que possa ser usado em comandos shell sem aspas (ou seja, escapar de todos os caracteres que os shells tendem a tratar especialmente com barras invertidas).
Em outras palavras, no Bash, você pode usar
printf '%b\n' 'line1\n\nline2\nline3'
para obter
line1
line2
line3
Se você não quiser a nova linha seguindo line3
, use printf '%b' 'line1\n\nline2\nline3'
.
O inverso ( %q
) é igualmente útil,
printf '%q' '(foo $bar baz]'
exibindo
\(foo\ \$bar\ baz\]
Se você tiver uma variável Bash contendo uma string com barras invertidas, por exemplo
myvar='line1\n\nline2\nline3'
você pode expandir as seqüências de escape usando
mytext=$(printf '%b' "$myvar")
Se você quiser apenas especificar uma string literal com seqüências de escape, use $''
:
mytext=$'line1\n\nline2\nline3'
Tags bash text-processing