Belirli bir aralıktaki çizgi uzunluğu için "grep" nasıl yapılır?


28

NOT: Bu soru, Soru-Cevap bölümünün tamamlayıcısıdır: Belirli bir aralıktaki satır uzunluğu * için "grep" nasıl *?


Yalnızca minimum veya 3 karakter uzunluğunda, ancak 10 karakterden uzun olmayan bir metin dosyasından (yeni satırla ayrılmış bir sözcük listesi) satırları almam gerekiyor.

Örnek:

GİRİŞ:

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

ÇIKTI:

megkíván
alma
kevesen

Soru: Bunu nasıl yapabilirim bash?


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

@Costa parlak ve aynı şey sed için de geçerli. Tam bir cevap gönderin.
orion

Yanıtlar:


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

nerede

  • -x deseni bütün çizgiyle eşleştir
  • . herhangi bir sembol
  • {3,10} önceki sembolün 3 ile 10 katı arasında bir miktar belirtiniz (herhangi birinin olması durumunda)

10

egrep kullanarak

egrep '^.{3,10}$'

3 veya daha fazla karakter için satırın başlangıcından sonuna kadar, ancak 10 karakterden küçük veya buna eşittir.


1

Kullanarak sed:

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

Veya:

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

0

Kullanarak awk:

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

lengthDeyimi uzunluğunu dönecekti $0varsayılan olarak (geçerli kayıt / çizgi) ve hattın uzunluğu verilen aralıkta Hava bu teste kod tarafından kullanılır. Bunun gibi bir testte karşılık gelen eylem bloğu yoksa, varsayılan eylem kaydı yazdırmaktır.

Verilen veriler üzerinde test:

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

Perl ile benzer şekilde:

$ perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.