Saya menemukan pertanyaan tentang, cara menghapus garis yang lebih panjang dari 2048 karakter:
Bagaimana cara menghapus baris jika lebih lama dari XY?
T: Tapi bagaimana saya bisa menghapus garis lebih pendek dari 4 karakter? Jadi hapus baris yang memiliki panjang 1 atau 2 atau 3 file.
PEMBARUAN: Terima kasih atas banyak jawaban BAIK, tetapi saya hanya dapat menandai satu sebagai OK
text-processing
sed
evachristine
sumber
sumber
sed '/^.\{,3\}$/d'
tidak bekerja dengan BSD sed:sed: 1: "/^.\{,3\}$/d": RE error: invalid repetition count(s)
. Versi sed -r valid secara sintaksis, tetapi tidak akan menghapus baris.Beberapa variasi lagi:
atau
atau
atau
atau
atau GNU awk:
sumber
Berikut adalah solusi Vim menggunakan mode Ex Vim dan
global
perintahnya.Ini sangat mirip dengan menggunakan
sed
, hanya saja beberapa karakter khusus ('{', '}') harus diloloskan.Menggunakan mode Regis Sangat Sihir Vim (\ v), pelolosan ini dapat dihindari.
Lihat juga: bantuan sulap
Terkadang juga berguna untuk melakukan yang sebaliknya
vglobal
.akan menghapus semuanya kecuali baris hingga 3 karakter.
sumber
untuk langsung menghapus garis yang Anda bisa:
Atau BRE:
Jika suatu baris tidak mengandung 4 karakter atau lebih, itu dihapus.
Melakukan hal di atas dalam subshell perintah-substitusi akan memastikan bahwa
grep
mendapat deskriptor baca di atasnya sebelum kucing mulai menulis untuk itu, tetapi<<HEREDOC
juga akan memastikan bahwa hasilnya tetap dialirkan dan tidak menyebabkan kesalahan panjang argumen.sumber
sumber
Anda bisa menggunakan
grep
:Jika Anda menghitung spasi terdepan dalam panjang garis:
Jika Anda tidak menghitung spasi di baris pertama:
sumber