Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Как инвертировать регистр текста буфера обмена?  (Прочитано 1524 раз)

0 Пользователей и 1 Гость просматривают эту тему.

adawdp

  • Автор темы
  • Гость
2015 Aug 30; 05:21 PM; Oakville, ON, Canada.

— Понимаю, что Первое Сентября но всё же :) ! …

— Для того, чтобы весь текст стал в верхнем регистре, например, подойдёт:

Код: (bash) [Выделить]
xsel | sed 's/.*/\U&/' | xsel -b -i
— А как инвертировать регистр ? Т.е. „QWErtyu“ перевести  в „qweRTYU“ не обязательно Sed, но желательно покороче, конечно …

— Разницы xsel или xclip, наверное тоже большой нет, но если есть, что тогда предпочтительнее использовать?

Пользователь решил продолжить мысль [time]31 Август 2015, 05:55:24[/time]:
2015 Aug 30; 09:51 PM

— Вот есть решение на такой базе:
Код: (bash) [Выделить]
echo dfVmGJH | sed 'y/AaBbCcDdEeFfGgHhJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz/aAbBcCdDeEfFgGhHjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/'— Это нормально? „Покрасивее“ „поизящнее“  ;) ничего нет? Кто знает?

— Вопрос осложняется тем, что помимо английского, французского, украинского, русского у меня ещё два родных языка с разной графикой :(

Пользователь решил продолжить мысль [time]31 Август 2015, 06:09:32[/time]:
2015 Aug 30; 10:09 PM

— Да таки есть ещё решение, на базе tr:
Код: (bash) [Выделить]
echo QwErTyU | tr 'a-zA-Z' 'A-Za-z'
— Но буду благодарен за любые другие решения, могут пригодиться…

Пользователь решил продолжить мысль 31 Августа 2015, 05:39:27:
2015 Aug 30; 10:39 PM

— Это получше думаю tr что-то другие языки не любит, оказывается  :'(
Код: (bash) [Выделить]
echo ПоПрОсТоМуNoFriLls | sed -r 's/.*/<&>/;s/[A-ZА-Я]+/\L>&</g;s/<(\w*)>/\U\1/g'
— Но всё равно мне кажется что есть что-то более как бы для „всех случаев жизни“ …
« Последнее редактирование: 31 Августа 2015, 05:39:27 от adawdp »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Не во всех версиях bash работает:
Код: (bash) [Выделить]
line=ПоПрОсТоМуNoFriLls
echo ${line~~}

Пользователь решил продолжить мысль 31 Август 2015, 12:13:32:
Не знаю насколько короче(хотя сам скрипт можно вынести в отдельный файл с вызовом по gawk -f script.name или функцию), но тоже нужен современный awk
Код: (bash) [Выделить]
gawk '
    BEGIN{FS=OFS=""}
    {
        for(i=1;i<=NF;i++)
            if($i~/[[:upper:]]/)
                $i=tolower($i)
            else
                $i=toupper($i)
    }
    1'

Пользователь решил продолжить мысль 31 Август 2015, 14:22:02:
Еще вариант на sed (для 1-й строки)
Код: (bash) [Выделить]
sed 's/^[[:upper:]]/\l&\n/;t1;s/^[[:lower:]]/\u&\n/;t1;s/./&\n/;:1;P;D;' | tr -d \\nPS. Ваш последний скрипт не будет работать при наличии небуквенных символов. Я бы сделал что-то вроде
Код: (bash) [Выделить]
sed 's/\w/&`/g;s/\([[:upper:]]\)`/\l\1/g;s/\([[:lower:]]\)`/\u\1/g'Не критично конечно, но может работать чуть медленнее чем мой…

Пользователь решил продолжить мысль 31 Август 2015, 14:52:54:
Или Ваш чуть короче
Код: (bash) [Выделить]
sed -r 's/[[:upper:]]+/>\L&</g;s/(^|<)([^<>]*)(>|$)/\U\2/g'
« Последнее редактирование: 31 Августа 2015, 14:55:38 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

adawdp

  • Автор темы
  • Гость
2015 Aug 31; 08:45 AM; Oakville, ON, Canada.

— Вам, Azure, спасибо всегда большое ! :)

— Остановился на этом варианте (эта строка в моём скрипте AkaXneur1.sh) :
Код: (bash) [Выделить]
xsel | sed 's/\w/&`/g;s/\([[:upper:]]\)`/\l\1/g;s/\([[:lower:]]\)`/\u\1/g' | xsel -b -i
— Вариант всеобъемлющий, подходит для всех пяти раскладок!

— В конечном изделии („конструктор“ скриптов программы autokey-gtk 0.90.4) всё выглядит вот так:
Код: (text) [Выделить]
# Enter script code
keyboard.send_keys("<ctrl>+с")
output = system.exec_command ("sh /home/HOME/scripts/sed/AkaXneur1.sh")
keyboard.send_keys("<ctrl>+v")

— Раньше я использовал для этой задачи программу Xneur, но в 14 версии я от неё отказался, да и языки эта программа не все у меня поддерживает…

— Скрипт на awk сохранил в „закромах“ на случай если это, как мне кажется, большее простое решение по каким-то причинам будет давать сбои.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
adawdp,
Ну если Вы меня уж так нахвалили, тогда еще совет. Не очень нравится Ваше sh /home/HOME/scripts/sed/AkaXneur1.sh:
Код: (bash) [Выделить]
#!/bin/sed -f
s/[[:lower:]]/&`/g        #помечаем все строчные буквы значком «`»
s/[[:upper:]]\+/\L&/g     #группами изменяем все прописные на строчные
s/\([[:lower:]]\)`/\u\1/g #изменяем помеченные строчные на прописные c удалением пометки «`»
Тогда это можно вызывать по имени
Код: (bash) [Выделить]
xsel | /home/HOME/scripts/sed/AkaXneur1.sed | xsel -b -iЧтоб не писать длинные пути, стоит добавить каталог /home/HOME/scripts/sed/ в переменную PATH или создать ссылку на скрипт в каталоге, который там уже присутствует
Код: (bash) [Выделить]
sudo ln -fs /home/HOME/scripts/sed/AkaXneur1.sed /usr/bin/Или если не хотите давать права на исполнение
Код: (bash) [Выделить]
xsel | sed -f /home/HOME/scripts/sed/AkaXneur1.sed | xsel -b -i
А вариант с переменной не заработал?
Код: (bash) [Выделить]
xsel -ob | { read -r line ; echo "${line~~}" ; } | xsel -ib
« Последнее редактирование: 02 Сентября 2015, 11:41:13 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

adawdp

  • Автор темы
  • Гость
— Спасибо Azure я прочитал, тема имеет продолжение здесь:
https://forum.ubuntu.ru/index.php?topic=265572.0

— Вопрос поднят на должную высоту, поставлен на ребро и заострён! Красные нити и краеугольные камни во главе угла применены! :)

 

Страница сгенерирована за 0.047 секунд. Запросов: 25.