Saya ingin menemukan baris dalam kode saya yang melebihi panjang tertentu. Kode saya ada dalam banyak file. Apa cara yang baik untuk melakukan ini?
Saya ingin tahu file dan nomor baris; konten akan lebih disukai, tetapi tidak perlu. Tujuan dari latihan ini adalah untuk kemudian mencari cara untuk mematahkan garis (mungkin secara manual).
text-processing
Marcin
sumber
sumber
grep
), atau sebagai nomor baris, atau sebagai sesuatu yang lain (mungkin Anda ingin menerapkan tindakan lain pada mereka)? Mungkin cara yang paling tepat untuk melakukan ini tergantung pada apa yang akan dilakukan dengan baris-baris ini selanjutnya.Jawaban:
Dengan
grep
:Untuk baris, setidaknya 12 karakter.
Dengan beberapa file:
Beberapa
grep
implementasi seperti GNUgrep
, dapat melakukan pencarian file sendiri.Namun waspadalah terhadap symlink dan file non-reguler lainnya.
sumber
Solusi AWK
Atau, lebih ringkas:
sumber
awk 'length > 5'
awk 'length > 5'
awk
yang agak kurang elegan tapi ringkasawk '/^.{6,}/'
awk '/.{6}/'
(sebenarnya GNU awk sampai baru-baru ini digunakan sebagai yang tidak akan berfungsi kecuali Anda melewati POSIXLY_CORRECT ke lingkungannya).Karena satu hal yang hilang adalah
sed
solusisumber
Solusi bash
Jadi, misalnya
./whatever.sh < input.file
,. Ini tidak termasuk baris baru dengan mengurangi 1 dari$len
; jika itu tidak diinginkan, atau input Anda menggunakan ujung CRLF, Anda harus menyesuaikannya.sumber
${#line}
menghindariexpr
garpu?bash
solusi murni . Tetapi harap dicatat bahwa kecuali Anda tetapIFS=
di depanread
, ruang utama akan diabaikan.$line
sehingga tidak perlu mengurangi satu.read
nama untuk dibaca, itu akan membacanyaREPLY
dan menyertakan semua spasi putih. TidakIFS
diperlukan pengaturan.while read
loop untuk memproses teks adalah praktik yang sangat buruk.Dengan
perl
(misalnya), dengan asumsi Anda mencari garis yang lebih panjang dari 80 karakter:Untuk menampilkan garis:
Untuk menampilkan nomor baris:
Atau keduanya:
sumber
-l
baris perintah,perl
akan menghitung baris istirahat di baris Anda.Ruby:
Python:
sumber
Berikut solusi bash lain (bash 4):
Array yang dihasilkan jarang, sehingga indeks array dipertahankan. Sejak kami mulai dari 1, indeks adalah nomor baris dari baris yang kami simpan. Kami dapat menampilkan hanya nomor-nomor baris itu:
Atau kita bisa menampilkan garis sendiri:
sumber