Добрый день
Спасибо за ответ. Собственно, с POSIX и начинал изучение, только потом перешел к "сокращенным" вариантам для удобства.
Помогите разобраться, у меня остановилось изучение регулярок. Когда отрабатываю на тренажерах (
https://regexone.com) - все работает как часы, как только перехожу в Ubuntu - большая часть не хочет работать.
Вот смотрите, что получается. Создал ls2.com с именами файлов. Пробую различные варианты, которые должны работать:
1.
grep -E "[А-Я]" ls2.com
root@server2:/home/dimi# grep -E "[А-Я]" ls2.com
./а
некдот.txt
./а
некдот.xyz
./а
некдот2.xyz
./а
некдоти.kri
./
ФЛ_
МФА.txt
./
АНЕКдот.txt
./
неко_303432.txt
./а
некдоте.xyz
./а
некдоте3.xyz
./а
некдоте.txt
Т.е. полностью игнорируется наличие регистра в киррилице. И маленькая "а" в выборку тоже не попадает.
Меняю ключ на -Р, как Вы и посоветовали:2.
grep -P "[А-Я]" ls2.com
root@server2:/home/dimi# grep -P "[А-Я]" ls2.com
./
ФЛ_
МФА.txt
./
АНЕКдот.txt
С этим оператором все заработало корректно.
Пробую с этим ключом поствить метасимвол \w (на regexone.com обкатывал много раз - все работает)
3. grep -P "\w+\..{3}" ls2.com
root@server2:/home/dimi# grep -P "\w+\..{3}" ls2.com
./
mysoft.txt./
222.txt./
panels.ini./
Prov10.txt./
Pli.txt./анекдот
2.xyz./
file.txt./
123.txt./
ls2.com./
color.txt./
priba_e32454543.txt./
Pro_GS.txt./неко
_303432.txt./
Prov10.txt./
proverka.txt./анекдоте
3.xyz./
Eli.txt./
321.txt./
known_hosts.old./
235.txtОказывается, он с оператором -Р вообще не видит кириллицу!!!
И файлы, у которых имена состояли (до расширения) только из русских букв, вообще в выборку не попали!
Меняю оператор обратно на -Е:4. grep -E "\w+\..{3}" ls2.com
root@server2:/home/dimi# grep -E "\w+\..{3}" ls2.com
./
mysoft.txt./
222.txt./
panels.ini./
анекдот.txt./
Prov10.txt./
анекдот.xyz./
Pli.txt./
анекдот2.xyz./
file.txt./
123.txt./
ls2.com./
color.txt./
анекдоти.kri./
ФЛ_МФА.txt./
priba_e32454543.txt./
АНЕКдот.txt./
Pro_GS.txt./
неко_303432.txt./
Prov10.txt./
proverka.txt./
анекдоте.xyz./
анекдоте3.xyz./
Eli.txt./
321.txt./
анекдоте.txt./
known_hosts.old./
235.txtС этим ключом он опять начал видеть русские шрифты, в выборку попали уже все файлы, но с этим оператором регулярному выражению пофиг на регистр в русских шрифтах (с этого и начались раньше первые вопросы)Пробую применить "классическую" замену \w5. root@server2:/home/dimi# grep -E "[[:alnum:]]+[[:upper:]]\..{3}" ls2.com
./ФЛ_
МФА.txt./Pro_
GS.txt[[:word:]] - система вообще не распознала....
Как по минному полю - это работает, это не работает...
На какой системе символов в Ubunta остановиться, чтобы регулярки корректно работали? Потому что если бы совершенно случайно не выявил некооректную работу -Е и -Р с регистрами русских шрифтов, а в комбинации с \w - вообще неспособность видеть русские шрифты, так бы и мучился дальше...
P.S. Кстати, а вот работа символьных классов:
grep -E "[[:alnum:]][[:upper:]]" ls2.com
./
ФЛ_
МФА.txt
./
АНЕКдот.txt
./Pro_
GS.txt
Большие "А" и "Р" - команда не увидела, какие тут вообще закономерности?
!