Bagaimana cara menghapus baris baru dari file teks?

116

Saya memiliki data berikut, dan saya harus memasukkan semuanya ke dalam satu baris.

Aku punya ini:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

Saya perlu ini:

22791;14336;22821;34653;21491;25522;33238;

EDIT

Tak satu pun dari perintah ini bekerja dengan sempurna.

Kebanyakan dari mereka membiarkan datanya terlihat seperti ini:

22791

;14336

;22821

;34653

;21491

;25522
Alucard
sumber
15
Salin-tempel ke bilah alamat browser atau bidang teks lainnya. Quick'n'dirty tetapi berfungsi untuk sejumlah kecil data.
ignis

Jawaban:

245
tr -d '\n' < yourfile.txt

Edit:

Jika tidak ada perintah yang diposting di sini yang berfungsi, Anda memiliki sesuatu selain baris baru yang memisahkan bidang Anda. Mungkin Anda memiliki akhiran baris DOS / Windows di file tersebut (meskipun saya mengharapkan solusi Perl untuk bekerja bahkan dalam kasus itu)?

Mencoba:

tr -d "\n\r" < yourfile.txt

Jika itu tidak berhasil maka Anda harus memeriksa file Anda lebih dekat (misalnya dalam editor hex) untuk mengetahui karakter apa yang sebenarnya ada di sana yang ingin Anda hapus.

Tyler McHenry
sumber
7
Bagaimana Anda menulis keluaran ini ke file yang sama atau file lain?
Nama emas
3
Saya pikir trtidak cocok untuk baris kosong. Bagaimana menurut anda? - - Saya pikir sedadalah opsi terbaik seperti yang dijelaskan di sini stackoverflow.com/q/16414410/54964
Léo Léopold Hertz 준영
Untuk merutekan keluaran ke file lain, cukup gunakan pengalihan keluaran. Untuk merutekannya ke file pipe yang sama ke "sponge" (tersedia dalam paket "moreutils" pada sistem dasar Debian).
plugwash
Untuk menulis output ke file yang sama, gunakan subkulitecho -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
andpei
11
perl -p -i -e 's/\R//g;' filename

Harus melakukan pekerjaan itu.

ZyX
sumber
Golf keperl -pie 's/\R//g' filename
Trenton
9
paste -sd "" file.txt
Amardeep AC9MF
sumber
1
Pada Solaris (10) paste -sd ""tidak berfungsi pada STDIN secara default, jadi jika Anda menyalurkannya, gunakan: (some command) | paste -sd "" -
JohnGH
Ini tidak berfungsi jika Anda juga ingin menghapus baris baru terakhir . Ini hanya menghapus baris baru menengah.
josch
Ini tidak berfungsi di Mac OS, versi Sundeep berhasil. paste -sd'\0' -
Trenton
7
tr -d '\n' < file.txt

Atau

awk '{ printf "%s", $0 }' file.txt

Atau

sed ':a;N;$!ba;s/\n//g' file.txt

Halaman ini di sini memiliki banyak metode lain untuk baris menghapus.

diedit untuk menghapus penyalahgunaan kucing :)

Vivin Paliath
sumber
4

menggunakan

head -n 1 filename | od -c 

untuk mencari APA karakter yang menyinggung. lalu gunakan

tr -d '\n' <filename

untuk LF

tr -d '\r\n' <filename

untuk CRLF

MrE
sumber
4

Anda dapat mengedit file di vim:

$ vim inputfile
:%s/\n//g
loganaayahee
sumber
2
dan untuk mengganti dengan spasi::%s/\n/ /g
Remi Mélisson
2

Menggunakan man 1 ed:

# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed 
ed -s file <<< $'1,$j\n,p'  # print to stdout 
ed -s file <<< $'1,$j\nwq'  # in-place edit
carlmund
sumber
2

Fakta aneh: gunakan ASCII sebagai gantinya.

tr -d '\012' < filename.extension   

(Diedit karena saya tidak melihat jawaban sialan yang memiliki solusi yang sama, hanya perbedaannya adalah saya memiliki ASCII)

Byfjunarn
sumber
2

Gunakan sed dengan kelas POSIX

Ini akan menghapus semua baris yang hanya berisi spasi (spasi & tab)

sed '/^[[:space:]]*$/d'

Ambil saja apa pun yang sedang Anda kerjakan dan kirimkan ke sana

Contoh

cat filename | sed '/^[[:space:]]*$/d'

jasonleonhard
sumber
sed -i '/ ^ [[: space:]] * $ / d' nama file ... untuk pengeditan di tempat; jawaban seperti di atas akan ditampilkan ke layar
BradChesney79
1
$ perl -0777 -pe 's / \ n + // g' input> keluaran
$ perl -0777 -pe 'tr / \ n // d' input> keluaran
Greg Bacon
sumber
1

Jika datanya ada di file.txt, maka:

echo $(<file.txt) | tr -d ' '

The ' $(<file.txt)' membaca file dan memberikan isinya sebagai rangkaian kata yang 'bergema' kemudian bergema dengan spasi di antara mereka. Perintah 'tr' kemudian menghapus spasi apa pun:

22791;14336;22821;34653;21491;25522;33238;
Jonathan Leffler
sumber
Ini berfungsi selama input tidak terlalu besar dan selama Anda menggunakan Bash (diberi tag untuk Bash, jadi tidak apa-apa). Jika saya menulis jawabannya sekarang, itu akan menjadi tr -d '\n' < file.txt, itulah jawaban yang diterima (dan saya terkejut saya tidak menulisnya pada saat itu). Ini mungkin hanya ditulis untuk menunjukkan 'cara lain untuk melakukannya'.
Jonathan Leffler
1

xargs mengkonsumsi baris baru juga (tetapi menambahkan baris baru akhiran):

xargs < file.txt | tr -d ' '
marky
sumber
1

Dengan asumsi Anda hanya ingin menyimpan angka dan titik koma, hal berikut harus dilakukan dengan asumsi tidak ada masalah enkode besar, meskipun ini juga akan menghapus "baris baru" terakhir:

$ tr -cd ";0-9"

Anda dapat dengan mudah memodifikasi yang di atas untuk memasukkan karakter lain, misalnya jika Anda ingin mempertahankan titik desimal, koma, dll.

puncak
sumber
1

Menggunakan editor teks gedit (3.18.3)

  1. Klik Search
  2. Klik Temukan dan Ganti ...
  3. Masuk \n\ske kolom Find
  4. Biarkan Ganti dengan kosong (tidak ada)
  5. Periksa ekspresi reguler kotak
  6. Klik tombol Temukan

Catatan: ini tidak secara tepat membahas masalah OP asli, 7 tahun, tetapi harus membantu beberapa pengguna linux pemula (seperti saya) yang menemukan jalan mereka di sini dari SE dengan pertanyaan serupa "bagaimana cara mendapatkan teks saya semua dalam satu baris" .

Hastig Zusammenstellen
sumber
1

Sedang mengalami kasus yang sama hari ini, sangat mudah di vim atau nvim, Anda dapat menggunakan gJuntuk menggabungkan baris. Untuk kasus penggunaan Anda, lakukan saja

99gJ

ini akan menggabungkan 99 baris Anda. Anda dapat menyesuaikan jumlahnya 99sesuai kebutuhan sesuai dengan berapa banyak baris yang akan digabungkan. Jika hanya menggabungkan 1 baris, maka itu gJsudah cukup.

LeOn - Han Li
sumber
0

Saya akan melakukannya dengan awk, misalnya

awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt

(kerugiannya adalah bahwa a "terakumulasi" dalam memori).

EDIT

Lupa tentang printf! Jadi juga

awk '/[0-9]+/ { printf "%s;", $0 }' file.txt

atau mungkin lebih baik, apa yang sudah diberikan di lain dan menggunakan awk.

ShinTakezou
sumber
0

Saya biasanya mendapatkan usecase ini ketika saya menyalin cuplikan kode dari file dan saya ingin menempelkannya ke konsol tanpa menambahkan baris baru yang tidak perlu, saya akhirnya melakukan alias bash
(saya menyebutnya onelinejika Anda penasaran)

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o membaca clipboard saya

  • tr -d '\n' menghapus baris baru

  • tr -s ' ' menghapus spasi berulang

  • xsel -b -i mendorong ini kembali ke clipboard saya

setelah itu saya akan menempelkan konten baru clipboard ke oneline di konsol atau apa pun.

Mohammad AbuShady
sumber
0

Anda kehilangan jawaban yang paling jelas dan cepat terutama ketika Anda perlu melakukan ini di GUI untuk memperbaiki bungkus kata yang aneh.

  • Buka gedit

  • Kemudian Ctrl+ H, lalu taruh di Findtextbox \ndan di Replace withtempat kosong lalu isi checkbox Regular expressiondan voila.

Eduard Florinescu
sumber
0

Untuk juga menghapus baris baru di akhir file

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
crizCraig.dll
sumber