Bagaimana cara mengganti spasi dengan baris baru / masukkan dalam file teks?

18

Saya memiliki file teks sederhana bernama "example".

Membaca dengan perintah terminal: cat example

Keluaran:

abc cdef ghi jk lmnopq rst uv wxyz

Saya ingin mengubah (mengubah) menjadi bentuk berikut: (keluaran yang diharapkan dari cat example)

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

Bagaimana saya bisa melakukan ini melalui command-line?

(Ini hanya file contoh, saya ingin mengonversi posisi kata dalam kolom-vertikal)

Pandya
sumber
Terkait: unix.stackexchange.com/q/169995/85039
Sergiy Kolodyazhnyy

Jawaban:

37

Beberapa pilihan:

  1. Klasik, gunakan tr:

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

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

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

    perl -pe 's/ /\n/g' example
    
  5. Gunakan cangkangnya

    foo=$(cat example); echo -e ${foo// /\\n}
    
terdon
sumber
Sebagai sedcontoh saya perlu menambahkan $untuk mendapatkan bash untuk mengganti dengan baris baru yang sebenarnya yaitu:sed $'s/ /\\\n/g' example
acumartini
Contoh di atas untuk OSX sed, untuk gnu-sed:sed $'s/ /\\n/g'
acumartini
16

Coba perintah di bawah ini

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

ATAU

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

Contoh:

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

Penjelasan:

RS (Record seperator) adalah variabel awk bawaan. Dalam perintah pertama, nilai yang diberikan ke variabel pemisah Rekam adalah spasi. jadi awk memecah garis dari pencetakan setiap kali menemukan ruang.

Dalam perintah kedua, nilai yang diberikan ke variabel RS adalah spasi atau karakter baris baru. Perintah ini menghilangkan baris kosong tambahan yang muncul saat menjalankan perintah pertama.

Avinash Raj
sumber
8

Anda bisa menggunakan xargs,

cat example | xargs -n 1

atau lebih baik

xargs -n 1 < example
souravc
sumber
6
xargs -n 1 < examplemenyelamatkan Anda 1 anak kucing
Rinzwind
2

Menggunakan perloneliner:

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

Ini akan mengganti spasi dan tab dengan "ENTER" (alias \n)

Sylvain Pineau
sumber
1

Tidak ada yang diposting python, jadi ini dia:

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

Kami mengarahkan file input ke pythonaliran stdin, dan membacanya baris demi baris. Setiap baris dilucuti dari garis barunya, dibagi menjadi kata-kata, dan kemudian bergabung kembali menjadi satu string di mana setiap kata dipisahkan oleh baris baru. Hal ini dilakukan untuk memastikan memiliki satu kata per baris dan menghindari beberapa baris baru dimasukkan jika ada beberapa ruang di sebelah satu sama lain. Akhirnya kami berakhir dengan daftar string, yang kemudian bergabung menjadi string yang lebih besar, dan dicetak ke aliran stdout. Itu nanti bisa dialihkan ke file lain dengan > out.txt redirection.

Sergiy Kolodyazhnyy
sumber
0

Mirip dengan 'tr' di atas tetapi dengan tambahan:

  • Juga berfungsi untuk tab

  • Mengubah beberapa spasi atau tab menjadi 1 baris baru

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