regexp для указания количества символов в имени файла.

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

regexp для указания количества символов в имени файла.

Сообщение BigBrother »

Всем привет.
Есть простое выражение

Код: Выделить всё

ls | grep -E "^S.*sql$"

как его изменить, чтобы оно учитывало количество символов в имени файла. Например, хочу получить только файлы, в имени которых 5 или больше символов. Пробовал разные варианты

Код: Выделить всё

grep -E "(^S.*sql$){5,}"
grep -E "(^S.*sql$)" | grep -E ".*{5,}"

не получается...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20971
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: regexp для указания количества символов в имени файла.

Сообщение Bizdelnick »

BigBrother писал(а):
26.02.2016 23:39

Код: Выделить всё

grep -E "(^S.*sql$){5,}"

Здесь Вы пытаетесь применить квантификатор ко всему выражению, то есть найти от пяти и больше идущих подряд совпадений.

BigBrother писал(а):
26.02.2016 23:39

Код: Выделить всё

grep -E "(^S.*sql$)" | grep -E ".*{5,}"

А здесь Вы ставите два подряд квантификатора ('*' и '{5,}'), что по моему разумению должно являться синтаксической ошибкой (а если и не является, лишено практического смысла). Если убрать '*', этот вариант будет работать.
Но самое простое решение такое: ls | grep -E "^S.+sql$" — между 'S' и 'sql' должен быть хотя бы один любой символ (в общей сложности получается не менее пяти).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: regexp для указания количества символов в имени файла.

Сообщение BigBrother »

Bizdelnick писал(а):
27.02.2016 00:09
Если убрать '*', этот вариант будет работать.

Я был близок к решению :) Работает!

Bizdelnick писал(а):
27.02.2016 00:09
Но самое простое решение такое: ls | grep -E "^S.+sql$" — между 'S' и 'sql' должен быть хотя бы один любой символ (в общей сложности получается не менее пяти).

Это так совпало, что выражение подходит под условие >= 5 символов. Если изменить условие задачи, и сделать 20 символов, то работать не будет. Но, решение выше сработает.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20971
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: regexp для указания количества символов в имени файла.

Сообщение Bizdelnick »

BigBrother писал(а):
27.02.2016 00:35
Это так совпало, что выражение подходит под условие >= 5 символов. Если изменить условие задачи, и сделать 20 символов, то работать не будет.

Так замените квантификатор '+' (который эквивалентен '{1,}') на другой, для 20 символов — '{16,}'.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: