Как «grep» для длины линии в заданном диапазоне?


28

ПРИМЕЧАНИЕ: этот вопрос является дополнением к этим вопросам и ответам: как "grep" для длины строки * не * в данном диапазоне?


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

Пример:

ВХОД:

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

ВЫХОД:

megkíván
alma
kevesen

Вопрос: Как я могу сделать это в bash?


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

@ Костас гениален, и то же самое касается седа. Отправьте полный ответ.
Орион

Ответы:


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

где

  • -x сопоставить шаблон с целой линией
  • . любой символ
  • {3,10} количественно от 3 до 10 раз превратить предыдущий символ (в случае любых)

10

используя egrep

egrep '^.{3,10}$'

соответствует от начала до конца строк для 3 или более символов, но не более 10 символов.



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.