Сgrep
:
grep -xE '.{120}' < your-file
grep -x '.\{120\}' < your-file # more portable
Сawk
:
awk 'length == 120' < your-file
Сgrep
:
grep -xE '.{0,120}' < your-file
grep -x '.\{0,120\}' < your-file # more portable
Сawk
:
awk 'length <= 120' < your-file
Для строго меньше 120 замените 120 на 119 или <=
на <
.
Сgrep
:
grep -E '.{120}' < your-file # lines that contain a sequence of 120 characters
grep '.\{120\}' < your-file # more portable
И еще несколько вариантов:
grep -E '^.{120}' < your-file # lines that start with a sequence of 120 characters
grep '^.\{120\}' < your-file # more portable
grep -xE '.{120,}' < your-file # lines that have 120 or more characters
# between start and end.
grep -x '.\{120,\}' < your-file # more portable
Сawk
:
awk 'length >= 120' < your-file
Для строго более 120 замените 120 на 121 или >=
на >
.
Они предполагают, что ввод является корректным текстом, правильно закодированным в соответствии с шарм-картой локали. Если ввод содержит символы NUL, последовательности байтов, которые не образуют допустимые символы, строки, превышающиеLINE_MAX
(по количеству байтов ), или последняя строка без разделителя -(в случае grep
; awk
добавит отсутствующий разделитель ), ваш пробег может отличаться.
Если вы хотите выполнить эту фильтрацию на основе количества байтов, а не символов, установите языковой стандарт на C
илиPOSIX
(LC_ALL=C grep...
).
Чтобы выполнить фильтрацию на основе количества кластеров графем вместо символов, и если ваш grep
поддерживает параметр -P
, вы можете заменить E
на P
выше, а .
на \X
.
Сравните:
$ locale charmap
UTF-8
$ echo $'e\u0301te\u0301' | grep -xP '\X{3}'
été
$ echo $'e\u0301te\u0301' | grep -xE '.{5}'
été
$ echo $'e\u0301te\u0301' | LC_ALL=C grep -xE '.{7}'
été
(что été
— это 3 кластера графем, 5 символов, 7 байт ).
Не все grep -P
реализации поддерживают \X
. Некоторые поддерживают только многобайтовую карту символов UTF -8.
Обратите внимание, что фильтрация на основе ширины дисплея — это еще один вопрос, а ширина дисплея для заданной строки символов зависит от устройства отображения. См. Получить ширину отображения строки символов для получения дополнительной информации об этом.