Добавление заданных номеров
в / etc / nanorc
у меня работает в nano
версии 2.7. 1 .
Его также можно активировать с помощью -l
или - lnumber
в командной строке.
Переключите номера строк в nano с помощью: M - #
в моем случае Alt + Shift + 3 .
Используя sed
, и предполагая, что пробел перед словом не нужен:
$ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Add Data
Test Something
Tell Me Who You Are
Замена будет искать букву в верхнем регистре сразу после другого символа, не являющегося пробелом, и вставлять пробел между ними.
Для строк с более чем одним последовательным символом верхнего регистра, например WeAreATeam
, получается We Are ATeam
. Чтобы разобраться с этим, запустите подстановку второй раз:
$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
-e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
Добавить пробел между буквой, которая не является заглавной, и буквой буква в верхнем регистре
Perl, использующий регулярные выражения просмотра назад и вперед с нулевой шириной:
$ perl -pe 's/(?<=\w)(?=[A-Z])/ /g' file.in
Tell Me Who You Are ## TellMeWhoYouAre
I Am A Regular Expression User ## IAmARegulaExpressionUser
Эта версия также разделяет следующие друг за другом буквы в верхнем регистре.
Решение Python:
#!/usr/bin/env python
from __future__ import print_function
import sys
with open(sys.argv[1]) as f:
for line in f:
for char in line:
if char.isupper():
print(" "+char,end="")
else:
print(char,end="")
Тестовый запуск:
$ ./add_space_to_upper.py input.txt
Add Data
Test Something
Tell Me Who You Are
Пришел сюда, чтобы получить ответ на этот вопрос, и, прочитав другие предложения, пришел к решению, которое также обрабатывает случай ReadFromUSBDrive
–Read From USB Drive
-Я адаптировал стиль выражения ka3ak и использование кусаланандой нескольких выражений для получения следующего:
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g" -e "s/([A-Z]+)([A-Z])/\1 \2/g" file.in
напр.
$ sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g" -e "s/([A-Z]+)([A-Z])/\1 \2/g" <<EOF
AddData
TestSomething
TellMeWhoYouAre
ReadFromUSBDrive
EOF
Add Data
Test Something
Tell Me Who You Are
Read From USB Drive
Обратите внимание, что в этом случае слова из одной -буквы, такие как артикль «A» или местоимение «I», будут забиты, когда они встречаются непосредственно перед аббревиатурой, поскольку они будут неотличимы от символов в предполагаемой аббревиатуре, например. ReadAUSBDrive
отобразит Read AUSB Drive
.