Como substituir espaços por novas linhas / inserir em um arquivo de texto?

10

Eu tenho um arquivo de texto simples chamado "exemplo".

Lendo com o comando do terminal: cat example

Saída:

abc cdef ghi jk lmnopq rst uv wxyz

Eu quero converter (transformar) no seguinte formato: (saída esperada de cat example )

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Como posso fazer isso via linha de comando?

(Este é apenas um arquivo de exemplo, quero converter a posição da palavra na coluna vertical)

    
por Pandya 05.05.2014 / 16:34

5 respostas

23

Algumas escolhas:

  1. O clássico, use tr :

    tr ' ' '\n' < example
    
  2. Use cut

    cut -d ' ' --output-delimiter=$'\n' -f 1- example
    
  3. Use sed

    sed 's/ /\n/g' example
    
  4. Use perl

    perl -pe 's/ /\n/g' example
    
  5. Use o shell

    foo=$(cat example); echo -e ${foo// /\n}
    
por terdon 05.05.2014 / 16:42
15

Experimente o comando abaixo

awk -v RS=" " '{print}' file

OR

awk -v RS='[\n ]' '{print}' file

Exemplo:

$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Explicação:

RS (Recorder Separador) é uma variável interna do awk. No primeiro comando, o valor dado à variável do separador Record é o espaço. Então awk quebra a linha de impressão sempre que encontrar um espaço.

No segundo comando, o valor dado à variável RS é espaço ou um novo caractere de linha. Esse comando elimina a linha em branco extra que aparece durante a execução do primeiro comando.

    
por Avinash Raj 05.05.2014 / 16:37
6

Você pode usar xargs ,

cat example | xargs -n 1

ou melhor

xargs -n 1 < example
    
por souravc 05.05.2014 / 16:42
2

Usando um perl oneliner:

perl -p -i -e 's/\s/\n/g' example

Ele substituirá espaços e tabulações por "ENTER" (também conhecido como \n )

    
por Sylvain Pineau 05.05.2014 / 16:42
1

Ninguém postou python, então aqui está:

python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt 

Nós redirecionamos o arquivo de entrada para o fluxo de stdin de python e o lemos linha por linha. Cada linha é despojada de sua nova linha, dividida em palavras e depois reunida em uma string onde cada palavra é separada por nova linha. Isso é feito para garantir uma palavra por linha e evitar que novas linhas sejam inseridas no caso de haver vários espaços ao lado entre si. Eventualmente acabamos com uma lista de strings, que é então novamente unida em uma string maior, e impressa em stdout stream. Posteriormente, isso pode ser redirecionado para outro arquivo com o redirecionamento > out.txt .

    
por Sergiy Kolodyazhnyy 16.01.2017 / 14:52