split string para duas partes usando sed ou awk ou perl ou bash

1

Eu tenho uma string assim:

Grades ABCDEF-123456

Eu quero dividir essa string em duas seções como esta

Grades ABCDEF
Grades 123456

Como posso fazer isso no bash?

    
por Sincerity 08.10.2018 / 19:55

3 respostas

3

Você pode fazer isso totalmente no seu shell também:

text="Grades ABCDEF-123456"

Divida o texto principal. Você poderia capturá-lo se necessário, mas aqui vamos descartá-lo:

grades="${text#* }"

Agora podemos extrair as duas partes como variáveis, mas, por enquanto, apenas as imprimiremos:

echo "Grades ${grades%-*}"
echo "Grades ${grades#*-}"

Você também pode causar falhas em uma única instrução de saída, mas não acho que ela seja legível (mesmo se printf for mais seguro que echo para determinadas classes de texto):

printf "Grades %s\nGrades %s\n" "${grades%-*}" "${grades#*-}"
    
por 08.10.2018 / 20:19
2
echo Grades "ABCDE-12345" | sed 's/-/ /g' | awk '{ print $1" "$2"\n"$1" "$3'}
Grades ABCDE
Grades 12345

ou por @steeldriver

awk -F'[ -]' '{print $1, $2; print $1, $3}'
    
por 08.10.2018 / 19:58
1

Você pode fazer isso substituindo o traço por uma nova linha seguida do primeiro campo:

perl -alpe 's/-/\n$F[0] /' 
    
por 08.10.2018 / 22:22

Tags