divide linhas e imprime para nova linha para determinado caractere

0

Eu preciso dividir as linhas e imprimi-las na próxima linha quando o padrão coincide.

Como eu tenho:

ABC123xxx:: 2345 ABC345yyy:: 5678 ABC986zzz:: 7955

E eu quero imprimir para uma nova linha quando o padrão ABC virá:

ABC123xxx:: 2345
ABC345yyy:: 5678
ABC986zzz:: 7955
    
por kkc 29.04.2016 / 06:04

3 respostas

1

sed -E -e 's/ (ABC)/\n/g' 

O comando sed substitui qualquer instância de ABC por uma nova linha seguida de ABC. Ele usa o () para capturar parte da correspondência ( ABC sem o espaço inicial) e para incluí-lo na substituição.

por exemplo,

$ echo 'ABC123xxx:: 2345 ABC345yyy:: 5678 ABC986zzz:: 7955'| 
    sed -E -e 's/ (ABC)/\n/g'
ABC123xxx:: 2345
ABC345yyy:: 5678
ABC986zzz:: 7955
    
por 29.04.2016 / 06:34
0

com sed :

$ sed -e 's/ ABC/\
ABC/g' <file
ABC123xxx:: 2345
ABC345yyy:: 5678
ABC986zzz:: 7955
    
por 29.04.2016 / 06:12
0

Experimente este awk.

echo "ABC123xxx:: 2345 ABC345yyy:: 5678 ABC986zzz:: 7955" | awk '{for(i=1;i<=NF;i++) if(match($i,"ABC")>0) line=line "\n"$i;else line=line $i; sub("^\n","",line); print line}'

Cria uma linha com todos os campos, adicionando na frente dos campos que começam com "ABC" uma quebra de linha. Finalmente, elimina a primeira quebra de linha e imprime

    
por 29.04.2016 / 10:20