преобразовать текст в случай змеи в camelCase в MAC OS High sierra - PullRequest
0 голосов
/ 08 мая 2018

Я хотел бы перевести 2+ слова в дело верблюда. Я попробовал в онлайн версии Ubuntu, и это работает. Но не на Mac OS.

my amazing-long_variable -> myAmazingLongVariable

echo "my amazing-long_variable" | sed -E 's/[ |_|-]([a-z])/\U\1/gi' | sed -E 's/^([A-Z])/\l\1/'

Мой вывод:

sed: 1: "s/[ |_|-]([a-z])/\U\1/gi": bad flag in substitute command: 'i'

2-я попытка:

echo "my amazing-long_variable" | sed -E 's/[ |_|-]([a-z])/\U\1/g' | sed -E 's/^([A-Z])/\l\1/'

Выход:

myUamazingUlongUvariable

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Я добился этого с помощью кода ниже. Не очень хорошее решение, но оно работает;)

find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3\u\$4'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3\u\$4\u\$5'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3\u\$4\u\$5\u\$6'/g"
0 голосов
/ 08 мая 2018

\U и \l являются расширениями GNU sed. Perl будет работать для вас из коробки:

echo "my amazing-long_variable" | perl -nE 'say lcfirst join "", map {ucfirst lc} split /[^[:alnum:]]+/'

Вы читаете это справа налево

  • split /[^[:alnum:]]+/ разбивает переменную по умолчанию $_ (т. Е. Текущую строку) на любую последовательность не буквенно-цифровых символов, что приводит к появлению списка "my", "amazing", "long", "variable"
  • map {ucfirst lc} применяет код ucfirst lc к каждому слову по очереди.
    • как вы можете догадаться, lc строчные буквы слова, затем ucfirst заглавные буквы первого символа
    • это приводит к списку "Мой", "Удивительный", "Длинный", "Переменный"
  • join "", объединяет слова, используя пустую строку: "MyAmazingLongVariable"
  • lcfirst строчные буквы первого символа: "myAmazingLongVariable"

Опция perl -n перебирает входной файл и / или стандартный ввод, помещая каждую строку в «переменную по умолчанию» $_. -l заботится об окончании строки для команды печати. ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...