Bagaimana cara "grep" untuk panjang garis dalam rentang tertentu?


28

CATATAN: Pertanyaan ini merupakan pelengkap dari T&J ini: Bagaimana cara "grep" untuk panjang garis * tidak * dalam rentang tertentu?


Saya hanya perlu mendapatkan baris dari file teks (daftar kata, dipisahkan dengan baris baru) yang memiliki rentang panjang minimum atau sama dengan 3 karakter, tetapi tidak lebih panjang atau sama dengan 10.

Contoh:

MEMASUKKAN:

egyezményét
megkíván
ki
alma
kevesen
meghatározó

KELUARAN:

megkíván
alma
kevesen

Pertanyaan: Bagaimana saya bisa melakukan ini bash?


9
grep -x '.\{3,10\}'
Costas

@ Costas brilian, dan hal yang sama berlaku untuk sed juga. Posting jawaban yang lengkap.
orion

Jawaban:


37
grep -x '.\{3,10\}'

dimana

  • -x mencocokkan pola ke seluruh baris
  • . simbol apa pun
  • {3,10} mengukur dari 3 hingga 10 kali simbol sebelumnya (dalam kasus yang mana saja)

10

menggunakan egrep

egrep '^.{3,10}$'

cocok dari awal hingga akhir baris untuk 3 karakter atau lebih tetapi kurang dari atau sama dengan 10 karakter.


1

Menggunakan sed:

sed '/^.\{3,10\}$/!d'

Atau:

sed -r '/^.{3,10}$/!d'

0

Menggunakan awk:

awk 'length >= 3 && length <= 10' file

The lengthpernyataan akan mengembalikan panjang $0(saat record / baris) secara default, dan ini digunakan oleh kode untuk menguji cuaca garis ini panjang adalah dalam kisaran yang diberikan. Jika tes seperti ini tidak memiliki blok tindakan yang sesuai, maka tindakan default adalah mencetak catatan.

Pengujian pada data yang diberikan:

$ awk 'length >= 3 && length <= 10' file
megkíván
alma
kevesen

Demikian pula dengan Perl:

$ perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.