GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa menghapus baris baru jika itu adalah karakter terakhir dalam file?

perl -pe 'chomp if eof' filename >filename2

atau, untuk mengedit file di tempat:

perl -pi -e 'chomp if eof' filename

Ini digambarkan sebagai 'penghujatan perl' di situs web awk yang saya lihat.

Tapi, dalam sebuah tes, itu berhasil.


Anda dapat memanfaatkan fakta bahwa penggantian perintah shell menghapus karakter baris baru yang tertinggal :

Bentuk sederhana yang berfungsi di bash, ksh, zsh:

printf %s "$(< in.txt)" > out.txt

Alternatif portabel (sesuai POSIX) (sedikit kurang efisien):

printf %s "$(cat in.txt)" > out.txt

Catatan:

  • Jika in.txt diakhiri dengan banyak karakter baris baru, substitusi perintah menghapus semua dari mereka . (Ini tidak menghapus karakter spasi selain mengikuti baris baru.)
  • Karena pendekatan ini membaca seluruh file masukan ke dalam memori , disarankan hanya untuk file yang lebih kecil.
  • printf %s memastikan bahwa tidak ada baris baru yang ditambahkan ke output (itu adalah alternatif yang sesuai dengan POSIX untuk echo -n yang tidak standar; lihat http://pubs.opengroup.org/onlinepubs/009696799/utilities/echo.html dan https://unix.stackexchange.com/a/65819)

Sebuah panduan untuk jawaban lainnya :

  • Jika Perl tersedia, pilih jawaban yang diterima - sederhana dan hemat memori (tidak membaca seluruh file masukan sekaligus).

  • Jika tidak, pertimbangkan Awk dari ghostdog74 jawaban - tidak jelas, tetapi juga hemat memori; padanan yang lebih mudah dibaca (sesuai POSIX) adalah:

  • awk 'NR > 1 { print prev } { prev=$0 } END { ORS=""; print }' in.txt

  • Pencetakan ditunda satu baris sehingga baris terakhir dapat ditangani di END blok, di mana ia dicetak tanpa \n di belakangnya karena menyetel pemisah catatan keluaran (OFS ) ke string kosong.

  • Jika Anda menginginkan solusi verbose, namun cepat dan kuat yang benar-benar dapat diedit di tempat (berlawanan dengan membuat file temp. yang kemudian menggantikan yang asli), pertimbangkan skrip Perl jrockway .


Linux
  1. Bagaimana cara menambahkan baris baru ke akhir file?

  2. Bagaimana saya bisa menghubungkan file di Linux?

  3. Bagaimana saya bisa mengingat argumen dari perintah bash sebelumnya?

  1. menggunakan linux bagaimana saya bisa meneruskan konten file sebagai parameter ke yang dapat dieksekusi?

  2. Bagaimana cara menyimpan output dari perintah awk ini ke file?

  3. Bagaimana saya bisa mendaftar (ls) 5 file terakhir yang dimodifikasi dalam direktori?

  1. Bagaimana saya bisa menambahkan pengguna biasa ke file sudoers?

  2. Bagaimana Anda mem-gunzip file dan menyimpan file .gz?

  3. Bagaimana cara memastikan sistem saya menggunakan file ~/.screenrc?