Em bash
, em vez de tentar inserir o caractere de nova linha como uma seqüência de escape, simplesmente digite-o como uma nova linha no meio da string citada pressionando Enter. Por exemplo,
bash-4.1$ seq -s "$
> " 3
1$
2$
3
bash-4.1$
Como insiro uma string contendo caracteres de escape (\ n, \ t, etc) como separador para o comando seq
?
O formato padrão inclui um caractere de nova linha:
$ seq 3
1
2
3
Mas se eu tentar adicionar algo mais uma nova linha, a barra invertida é escapada e um literal "\ n" é usado:
$ seq -s "$\n" 3
1\n2\n3
O mesmo acontece usando aspas simples, sem aspas ou outros caracteres de escape:
$ seq -s "\t" 3
1\t2\t3
$ seq -s \t 3
1t2t3
Este não é o comportamento padrão para comandos como echo
, então estou um pouco confuso aqui ...
Editar: Idealmente, eu gostaria de uma solução um pouco portátil (que funciona em tsch
, bem como bash
, por exemplo), e sem recorrer a Perl ou outras línguas.
Para obter guias e outros caracteres estranhos, você também pode tentar:
$ seq -s "$(echo -e '\t')" 3
1 2 3
$ seq -s "$(echo -e '\n$')" 3
1
$2
$3
Pelo menos no bash, você pode usar strings interpretadas como em ANSI C usando o formato $'string'
(estas devem ser aspas simples).
seq -s $'$\n' 3
1$
2$
3
tcsh
reclama sobre um nome de variável ilegal, infelizmente.
Eu não sei - mas como uma alternativa
$ perl -e 'printf "%9d\n",$_ for 6..15'
produz
6
7
8
9
10
11
12
13
14
15
e
$ perl -le 'print "\$$_" for 1..5'
produz
$1
$2
$3
$4
$5
seq -s "$(echo -e '\n')" 3
não funciona. Uma solução possível: seq -s "$(echo -e '\n\r')" 3 | tr -d '\r'
Tags command-line terminal