¿Cómo reemplazar espacios con líneas nuevas / ingresar en un archivo de texto?

18

Tengo un archivo de texto simple llamado "ejemplo".

Lectura con comando de terminal: cat example

Salida:

abc cdef ghi jk lmnopq rst uv wxyz

Quiero convertir (transformar) en la siguiente forma: (salida esperada de cat example)

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

¿Cómo puedo hacer esto a través de la línea de comandos?

(Este es solo un archivo de ejemplo, quiero convertir la posición de la palabra en columna vertical)

Pandya
fuente
Relacionado: unix.stackexchange.com/q/169995/85039
Sergiy Kolodyazhnyy

Respuestas:

37

Algunas opciones

  1. El clásico, usa tr:

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

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

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

    perl -pe 's/ /\n/g' example
    
  5. Usa el caparazón

    foo=$(cat example); echo -e ${foo// /\\n}
    
terdon
fuente
Para el sedejemplo, necesitaba agregar un $para obtener bash para reemplazar con una nueva línea real, es decir:sed $'s/ /\\\n/g' example
acumartini
Ejemplo anterior para OSX sed, para gnu-sed:sed $'s/ /\\n/g'
acumartini
16

Prueba el siguiente comando

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

O

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

Ejemplo:

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

Explicación:

RS (separador de registros) es una variable awk incorporada. En el primer comando, el valor dado a la variable de separación de Registro es espacio. así que awk rompe la línea de impresión cada vez que encuentra un espacio.

En el segundo comando, el valor dado a la variable RS es espacio o un nuevo carácter de línea. Este comando elimina la línea en blanco adicional que aparece mientras se ejecuta el primer comando.

Avinash Raj
fuente
8

Puedes usar xargs,

cat example | xargs -n 1

o mejor

xargs -n 1 < example
souravc
fuente
66
xargs -n 1 < examplete salva 1 gatito
Rinzwind 05 de
2

Usando un perloneliner:

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

Reemplazará espacios y pestañas con "ENTER" (también conocido como \n)

Sylvain Pineau
fuente
1

Nadie publicó Python, así que aquí está eso:

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

Redirigimos el archivo de entrada al pythonflujo stdin de 'y lo leemos línea por línea. Cada línea se despoja de su nueva línea final, se divide en palabras y luego se vuelve a unir en una cadena donde cada palabra está separada por una nueva línea. Esto se hace para garantizar tener una palabra por línea y evitar que se inserten varias líneas nuevas en caso de que haya varios espacios al lado de El uno al otro. Finalmente, terminamos con una lista de cadenas, que luego se une nuevamente en una cadena más grande y se imprime en la secuencia estándar. Eso luego puede ser redirigido a otro archivo con > out.txt redirección.

Sergiy Kolodyazhnyy
fuente
0

Similar al 'tr' anterior pero con las adiciones:

  • También funciona para pestañas

  • Convierte múltiples espacios o pestañas a 1 nueva línea

    tr -s '[:space:]' '\n' < example
    
AstroTom
fuente