Нижний регистр все кроме первой (Прописной) буквы от ВЕРХНЕГО РЕГИСТРА в кириллице

По существу любое распределение магистрали должно хорошо работать для этого (они используют свое собственное распределение для взламывания на нем). Используйте любые более удобные чувства.

5
17.10.2013, 15:43
2 ответа

Править: С тех пор существует некоторый беспорядок о если vim или sed должен использоваться. Я предоставляю решения для обоих:

Vim

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

:%s/\<\(\k\)\(\k*\)\>/\u\1\L\2/g

\k алфавитно-цифровые символы соответствий и _. Широко используемый \w эквивалентно [A-Za-z0-9_] и перестанет работать на Кириллических буквах.

\< и \> захватите границы слова, и круглые скобки группируют соответствие в первую букву и остальных, которые получаются с помощью \1 и \2, соответственно.

Чтобы этот шаблон работал, необходимо настроить энергию для использования UTF-8.

set encoding=utf-8

Sed

sed 's/\b\([[:alpha:]]\)\([[:alpha:]]*\)\b/\u\1\L\2/g' <inputfile>

\b границы слова соответствий в sed, остальное совпадает с vim версия. (Протестированный на GNU sed, классы символов не могли бы поддерживаться всего sed версии.)

5
27.01.2020, 20:38
  • 1
    Таким образом, это - просто описание, почему мой не будет работать в принципе... Хорошо. Спасибо. –  Xsi 16.10.2013, 15:05
  • 2
    Ну, это не работает над моим также: повторите "АБРАЗИЯ" | sed ': % s / (\k) (\k*)/\u\1\L\2 /' АБРАЗИЯ –  Xsi 16.10.2013, 15:14
  • 3
    Для sed: Не только предназначался для АБВГД.. но и все слова в файле стали uppercased. –  Xsi 17.10.2013, 15:39

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

Для отдельного слова просто переместитесь в первую букву слова и использования:

lgue

Чтобы сделать больше чем одно слово, Вы захотите использовать макрос

qqlguewq

Я сломаю это:

  • qq - начните записывать названный макрос q
  • l (это - нижний регистр L) - перемещают один символ направо
  • gue - поверните каждый символьный нижний регистр (это gu) в конец текущего слова (e)
  • w - перейдите к первому символу следующего слова
  • q - прекратите записывать макрос

Можно назвать макрос с @q. Можно назвать его девять раз с 9@q, или сорок два раза с 42@q. С этим конкретным макросом безопасно назвать это произвольным количеством раз - таким образом, Вы могли использовать 9999@q.

Другой маршрут является рекурсивным макросом:

qqqqqlguew@qq
  • qqq - начинает записывать q макрос, затем сразу остановки записать, эффективно очищая тот регистр
  • @q - вызовы q макрос, который является пробелом теперь, но не будет, после того как Вы прекращаете записывать макрос
  • Остальная часть его ведет себя как выше

Когда макрос поразит конец заключительного слова в документе, это выйдет (поскольку это будет для любой ошибки того вида - иначе это продолжилось бы навсегда).

1
27.01.2020, 20:38
  • 1
    Что такое gu? "l" - это похоже в перемещении, которое я знаю. "gu" делает мини-цикл, повторяясь l + редактирование от l до e? Уверенный некоторая проблема. Я хочу вызвать свой макрос огромное количество раз 99999999999^9999999, что сделать? –  Xsi 16.10.2013, 17:33
  • 2
    "@q - называет q макрос, который является пробелом теперь, но не будет, после того как Вы прекращаете записывать макрос" recursivity, всегда были твердые гайки для меня (так как я пытался освоить стрелку вниз Knuth nonation && Conway). –  Xsi 16.10.2013, 17:41
  • 3
    qqqqqlguew@qq - ничто (но однажды), повесил немного моей энергии, спасенный положение ctrl-c. –  Xsi 16.10.2013, 17:52

Теги

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