Como faço para cortar uma string já separada por espaços?

3

Digamos que haja uma string como essa

test="1/2/3 4/5/6 7/8/9/0"

Eles são separados por espaços, assim como '/'. Eu quero retornar um resultado como este, tomando o segundo campo de cada segmento de seqüência de caracteres.

2 5 8

É possível fazer isso com o corte? Ou preciso de mais alguma coisa?

newstring=$(echo $test | cut -d "/" -f2)

retorna apenas

2

Não sei o que fazer.

    
por TTRC 15.09.2015 / 17:16

3 respostas

2

Uma coisa que você pode fazer é substituir espaços por novas linhas e usar awk ou cut . Em seguida, substitua as novas linhas por espaços. Você vai querer echo a coisa toda para obter uma nova linha final novamente:

$ echo $(echo "$test" | tr ' ' '\n' | awk -F'/' '{print $2}' | tr '\n' ' ')
2 5 8

Ou

$ echo $(echo "$test" | tr ' ' '\n' | cut -d/ -f 2 | tr '\n' ' ')
2 5 8

Você também pode usar apenas perl :

$ echo "$test" | perl -lane 's#.*?/(.+?)/.*#$1# for @F; print "@F"' 
2 5 8
    
por 15.09.2015 / 17:25
3

com zsh :

$ echo ${${${=test}#*/}%%/*}
2 5 8

Caso contrário, você poderia fazer:

$ printf '%s\n' "$test" | sed 's|[^ /]*/\([^/]*\)[^ ]*||g'
2 5 8
    
por 15.09.2015 / 17:34
0

Se você perguntar por cut

cut -d/ -f2,4,6 --output-delimiter=' ' <<<"$test"
    
por 15.09.2015 / 21:35