Saya memiliki beberapa file teks yang saya gunakan untuk mencatat - hanya teks biasa, biasanya hanya menggunakan cat >> file
. Kadang-kadang saya menggunakan satu atau dua baris kosong (hanya kembali - karakter baris baru) untuk menentukan subjek / alur pemikiran baru. Pada akhir setiap sesi, sebelum menutup file dengan Ctrl+ D, saya biasanya menambahkan banyak (5-10) baris kosong (tombol kembali) hanya untuk memisahkan sesi.
Ini jelas tidak terlalu pintar, tetapi bekerja untuk saya untuk tujuan ini. Aku tidak Namun akhir-up dengan banyak dan banyak baris kosong yang tidak perlu, jadi saya sedang mencari cara untuk menghapus (sebagian) garis ekstra. Apakah ada perintah Linux (cut, paste, grep, ...?) Yang dapat digunakan langsung dengan beberapa opsi? Atau, apakah ada yang punya ide untuk skrip sed, awk atau perl (baik dalam bahasa scripting apa pun, walaupun saya lebih suka skrip sed atau awk) yang akan melakukan apa yang saya inginkan? Menulis sesuatu dalam C ++ (yang sebenarnya bisa saya lakukan sendiri), sepertinya berlebihan.
Kasus # 1: Yang saya butuhkan adalah skrip / perintah yang akan menghapus lebih dari dua (3 atau lebih) baris kosong berturut-turut, dan menggantinya dengan hanya dua baris kosong. Meskipun akan lebih baik jika itu juga bisa tweak untuk menghapus lebih dari satu baris (2 atau lebih) dan / atau mengganti beberapa baris kosong dengan hanya satu baris kosong.
Kasus # 2: Saya juga bisa menggunakan skrip / perintah yang akan menghapus satu baris kosong di antara dua baris teks, tetapi membiarkan beberapa baris kosong apa adanya (meskipun menghapus salah satu baris kosong juga dapat diterima).
vim
satu, dan untuk mengganti baris kosong dengan satu baris kosong).Jawaban:
Kasus 1:
Kasus 2:
sumber
Anda dapat menggunakan
uniq
untuk mengelompokkan banyak instance dari baris kosong menjadi satu baris kosong, tetapi juga akan menutup baris yang berisi teks jika sama dan di bawah satu sama lain.sumber
Kasus 1:
Kasus 2:
sumber
Anda dapat mengatasi Kasus # 1 seperti ini dengan sed GNU:
Yaitu, kumpulkan garis-garis kosong di ruang pola, dan jika ada lebih dari tiga garis atau lebih, kurangi menjadi dua garis.
Untuk bergabung dengan garis spasi tunggal, seperti dalam Kasus # 2, Anda dapat melakukannya seperti ini:
Atau dalam bentuk komentar:
sumber
Solusi ini juga menangani baris kosong terakhir dalam file:
sumber
Mengikuti saran Anthon untuk menggunakan "uniq" ...
Hapus garis depan, belakang, dan duplikat kosong.
Dalam satu garis panjang:
Atau cukup gunakan "cat -s".
Saya beralih dari kurung ke kurung kurawal agar tetap dalam konteks shell saat ini yang saya anggap lebih efisien. Perhatikan bahwa kurung kurawal memerlukan tanda koma setelah perintah terakhir dan membutuhkan ruang untuk pemisahan.
Dalam satu baris.
sumber
Solusi yang diposting tampak agak samar bagi saya. Berikut ini solusinya dalam Python 3.6:
Anda dapat memanggil fungsi dari juru bahasa atau menjalankannya dari shell seperti:
sumber