Выбор линий по длине

Вы можете запускать свои скрипты в tmux или screen практически в любом количестве фоновых процессов. Доступ к этим процессам можно получить в любое время.

См. tmux или экран GNU

6
14.07.2020, 10:04
1 ответ

ровно 120 символов

Сgrep:

grep -xE '.{120}' < your-file
grep -x '.\{120\}' < your-file # more portable

Сawk:

awk 'length == 120' < your-file

от 0 до 120 символов

Сgrep:

grep -xE '.{0,120}' < your-file
grep -x '.\{0,120\}' < your-file # more portable

Сawk:

awk 'length <= 120' < your-file

Для строго меньше 120 замените 120 на 119 или <=на <.

120 символов и более:

С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.

Обратите внимание, что фильтрация на основе ширины дисплея — это еще один вопрос, а ширина дисплея для заданной строки символов зависит от устройства отображения. См. Получить ширину отображения строки символов для получения дополнительной информации об этом.

16
18.03.2021, 23:19

Теги

Похожие вопросы