Inserir caracteres de escape no separador de comando seq

3

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.

    
por anol 12.12.2012 / 17:37

5 respostas

2

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$
    
por 12.12.2012 / 17:44
2

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
    
por 12.12.2012 / 17:51
1

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.

    
por 12.12.2012 / 18:06
0

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
    
por 12.12.2012 / 17:44
0

seq -s "$(echo -e '\n')" 3 não funciona. Uma solução possível: seq -s "$(echo -e '\n\r')" 3 | tr -d '\r'

    
por 28.08.2015 / 10:03