Як "грепнути" на довжину рядка в заданому діапазоні?


28

ПРИМІТКА: Це питання є доповненням до цього питання: Як "грепати" довжину рядка * не * у заданому діапазоні?


Мені потрібно отримати лише рядки з текстового файлу (списку слів, розділеного новим рядком), що має діапазон довжини мінімум або рівний 3 символам, але не довший або рівний 10.

Приклад:

ВХОД:

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

ВИХІД:

megkíván
alma
kevesen

Питання: Як я можу це зробити bash?


9
grep -x '.\{3,10\}'
Костас

@Costas блискучий, і те саме стосується і sed. Опублікуйте повну відповідь.
Оріон

Відповіді:


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

де

  • -x відповідність шаблону цілій лінії
  • . будь-який символ
  • {3,10} оцінити від 3 до 10 разів попередній символ (у випадку будь-якого)

10

за допомогою egrep

egrep '^.{3,10}$'

збігається від початку до кінця рядків на 3 та більше символів, але менше або дорівнює 10 символів.


1

Використання sed:

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

Або:

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

0

Використання awk:

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

Оператор lengthповертає $0за замовчуванням довжину (поточний запис / рядок), і це використовується кодом для перевірки, наскільки довжина рядка знаходиться в заданому діапазоні. Якщо такий тест не має відповідного блоку дій, дією за замовчуванням є друк запису.

Тестування за даними:

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

Аналогічно з Perl:

$ perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.