convertendo '0'… 'n' em '0' '1' até 'n'

0

Estou processando um arquivo de texto com algumas instruções do formulário

'0'...'7' 

ou

'0'...'9'

ou até mesmo

'a'...'j'

(o idioma '...' aparece apenas nessas estruturas) que gostaria de converter em declarações do formulário ...

 '0' '1' '2' '3' '4' '5' '6' '7'

Eu posso fazer isso com vim marcos, razoavelmente cutely, ou derrubar alguns python, mas eu gostaria de fazê-lo a partir da linha de comando. Posso obter um ponto de partida recomendado? Eu suspeito que há alguma magia sed que pode ser feita, mas eu não consigo entender isso ...

    
por Joe 11.09.2013 / 22:26

2 respostas

3

o bash tem um operador de sequência que você pode usar:

sequence () { 
    read start finish <<< "${1/.../ }"
    start=${start//\'/}
    finish=${finish//\'/}
    eval echo {$start..$finish}
}
while read line; do
    sequence "$line"
done << END
'0'...'7' 
'0'...'9'
'a'...'j'
END
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8 9
a b c d e f g h i j

Eu tenho que usar eval porque o bash tentará expandir a sequência antes de expandir as variáveis. Consulte o link

    
por 12.09.2013 / 15:04
0

Supondo que as sequências estão sempre ascendentes;

$ cat input alphabet
'0'...'7'
'0'...'9'
'a'...'j'
0123456789abcdefghijklmiopqrstuvwxyzj

tr \'. '  ' <input  | 
while read f t ; do 
    grep -Po "$f.*?$t" alphabet;
done

01234567
0123456789
abcdefghij

Isso é provavelmente muito mais lento que a versão bash-eval.

    
por 13.09.2013 / 03:50