Отдельные элементы слов CamelCase

Только root имеет права на выполнение скрипта, а ваш текущий пользователь — нет. Поскольку у вас есть доступ для чтения, вы можете обойти проблему, запустив bash./s300928290.sh.

5
10.03.2020, 08:56
4 ответа

Чтобы справиться со вторым примером, предложите подход, основанный на правилах. Рассмотрим следующий Perl-скрипт(camelcaseproc):

#!/usr/bin/perl -CSDA -p

s{  \W+                                     # break on non-word
 |  _                                       # break on "_"
 |  (?<=\p{Ll})(?=\p{Lu})                   #...aB... →...a-B...
 |  (?<=\p{Lu})(?=\p{Lu}\p{Ll})             #..ABCd.. →...AB-Cd.
 |  (?<=I)(?=am)                            # exceptions rules
 }{-}xg                                     # 
  • Строка 1 :использовать Unicode (для обработки акцентов, кириллица)
  • Строка 2 :заменить не -буквы на "\n"
  • строка 3,4,5 :разрыв -внутрисловные правила (определяются левым контекстом, правым контекстом)
  • строка 5 :правила исключения для "Iam"
  • опция строка 5:xпозволяет добавлять комментарии в регулярные выражения

После обычного chmod +x camelcaseprocмы можем использовать его как:

$ camelcaseproc <<< "IamTestECHO TEST PickFoo BARFull"
I-am-Test-ECHO-TEST-Pick-Foo-BAR-Full

$ camelcaseproc input-file

$ echo "IamTestECHO TEST PickFoo BARFull" | camelcaseproc
2
28.04.2021, 23:21

С GNU grep, используя свойства символов Unicode и нулевые -утверждения ширины:

grep -Po '((?<!=\p{Lu})\p{Lu}|(?<!=\pL)\pL)\p{Ll}*'

$ echo 'IamHelloTest forYou PickTest;' | grep -Po '((?<!=\p{Lu})\p{Lu}|(?<!=\pL)\pL)\p{Ll}*'
Iam
Hello
Test
for
You
Pick
Test
$ echo 'АямГеллоТест форЮ ПикТест' | grep -Po '((?<!=\p{Lu})\p{Lu}|(?<!=\pL)\pL)\p{Ll}*'
Аям
Гелло
Тест
фор
Ю
Пик
Тест
4
28.04.2021, 23:21

Если ваша реализация grepподдерживает-o(и не является открытой реализацией ast -, которая подавляет -oдля регулярных выражений, соответствующих пустой строке):

grep -o '[[:upper:]]*[[:lower:]]*'
7
28.04.2021, 23:21

Сsed:

sed -Ee 's/([a-z])([A-Z])/\1\n\2/g' < your_file

Сgrep:

grep -Eo '[A-Z][a-z]+' < your_file
1
28.04.2021, 23:21

Теги

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