Saya mencoba grep -v '^$'
di Linux dan itu tidak berhasil. File ini berasal dari sistem file Windows.
164
Coba yang berikut ini:
grep -v -e '^$' foo.txt
The -e
pilihan memungkinkan pola regex untuk pencocokan.
Kutipan tunggal di sekitar ^$
membuatnya bekerja untuk Cshell. Kerang lain akan senang dengan tanda kutip tunggal atau ganda.
UPDATE: Ini berfungsi bagi saya untuk file dengan garis kosong atau "semua ruang putih" (seperti garis jendela dengan ujung garis gaya "\ r \ n"), sedangkan di atas hanya menghapus file dengan garis kosong dan ujung garis unix gaya:
grep -v -e '^[[:space:]]*$' foo.txt
grep -E -v
, semuanya setelah-e
ditafsirkan sebagai polanya.grep -v -e '^[[:space:]]*$' -e '^#' file
akan memberi Anda semua baris non-kosong, non-komentar dalam skrip atau file konfigurasi (atau tipe file apa pun yang menggunakan karakter hash untuk komentar).-e
Opsi ini memungkinkan pola regex untuk pencocokan." Itu sangat menyesatkan .-e
adalah definisi (POSIX-) untuk:This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-).
(dari manual ). Grep sudah mengharapkan ekspresi reguler (dasar) secara default. Untuk pola ini, Anda dapat meninggalkan keluar-e
seluruhnya:grep -v '^[[:space:]]*$' foo.txt
.Tetap sederhana.
sumber
Menggunakan:
Atau cukup awk:
Jika Anda tidak memiliki dos2unix, maka Anda dapat menggunakan alat seperti tr :
sumber
awk
.Menjalankan kode-
Untuk memahami lebih lanjut tentang bagaimana / mengapa ini bekerja, saya sarankan membaca ekspresi reguler. http://www.regular-expressions.info/tutorial.html
sumber
Saya lebih suka menggunakan
egrep
, meskipun dalam pengujian saya dengan file asli dengan garis kosong pendekatan Anda bekerja dengan baik (meskipun tanpa tanda kutip dalam pengujian saya). Ini juga berhasil:sumber
Jika Anda memiliki urutan beberapa baris kosong dalam satu baris, dan hanya ingin satu baris kosong per urutan, cobalah
cat -s
menekan jalur output kosong berulang.Output Anda akan mulai dari
untuk
Tiga baris kosong dalam output asli akan dikompresi atau "diperas" menjadi satu baris kosong.
sumber
sumber
Sama dengan jawaban sebelumnya:
Di sini,
grep -e
berarti versi grep yang diperluas . '^ $' berarti tidak ada karakter antara ^ (Mulai dari baris) dan $ (akhir dari baris). '^' dan '$' adalah karakter regex.Jadi perintah
grep -v
akan mencetak semua baris yang tidak cocok dengan pola ini (Tidak ada karakter antara ^ dan $).Dengan cara ini, baris kosong kosong dihilangkan.
sumber
-e
tidak berarti "versi perpanjangan grep", mungkin Anda bingung-E
? Manual ini dengan jelas mengatakan bahwa-e
secara eksplisit mengatakan bahwa sebuah pola mengikuti. Karena pola tidak dimulai dengan tanda hubung, dan Anda hanya mendefinisikan satu pola saja, Anda mungkin juga membiarkannya karena secara default grep mengharapkan satu pola regex:grep -v '^$' foo.txt
(tidak perlu fungsi regex yang diperluas). Juga perlu disebutkan bahwa ini tidak menghilangkan baris kosong dalam file, hanya yang disalurkan melalui output. Untuk itu,sed -i
akan menjadi alat yang tepat.Saya berusaha keras, tetapi ini tampaknya berhasil (dengan asumsi
\r
menggigit Anda di sini):sumber
Menggunakan Perl:
\S
berarti cocok dengan karakter yang tidak kosong.sumber
egrep -v "^ \ s \ s +"
egrep sudah melakukan regex, dan ruang putih.
+ Duplikat pola saat ini.
^ Adalah awal
sumber
Menggunakan:
sumber
uniq
akan mengurangi garis kosong yang bersebelahan menjadi hanya satu garis kosong, tetapi tidak menghapusnya sepenuhnya. Tetap saja, saya suka mencoba menggunakanuniq
seperti itu. Penyortiran pertama secara efektif akan menghapus semua baris kosong - hanya menyisakan satu baris, tetapi mengatur ulang urutan garis mungkin tidak dapat diterima.Berikut ini cara lain untuk menghilangkan garis putih dan garis yang dimulai dengan
#
tanda. Saya pikir ini cukup berguna untuk membaca file konfigurasi.sumber
Memang benar bahwa penggunaan grep -v -e '^ $' dapat bekerja, namun itu tidak menghapus baris kosong yang memiliki 1 ruang atau lebih di dalamnya . Saya menemukan jawaban termudah dan paling sederhana untuk menghapus baris kosong adalah penggunaan awk . Berikut ini adalah sedikit dimodifikasi dari orang-orang awk di atas:
Tetapi karena pertanyaan ini adalah untuk menggunakan grep saya akan menjawab yang berikut:
Catatan : ruang kosong antara ^ dan *.
Atau Anda dapat menggunakan \ s untuk mewakili ruang kosong seperti ini:
sumber