Команда/скрипт для изменения регистра тектса

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
greengroon
Сообщения: 119
ОС: Ubuntu 9.04, FreeBSD 7.2

Команда/скрипт для изменения регистра тектса

Сообщение greengroon »

Есть большой файл open office. В нем список фамилий, причем все слова набраны в верхнем регистре. Надо исправить нормально, чтобы фамилии были с большой буквы, т е только первая буква в верхнем регистре. Глупо делать это вручную. Подскажите команду для опен офиса как это автоматизировать. Или может можно через какую скриптовую команду?
Какая GNUсная, GNUсная жизнь...
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Команда/скрипт для изменения регистра тектса

Сообщение allez »

Как этот файл выглядит-то? Покажите кусочек или опишите поподробней, как там расположены фамилии, указаны ли инициалы или полные имена, чем разделены записи и т. п. Мне телепатию за неуплату отключили. :)
Спасибо сказали:
Аватара пользователя
greengroon
Сообщения: 119
ОС: Ubuntu 9.04, FreeBSD 7.2

Re: Команда/скрипт для изменения регистра тектса

Сообщение greengroon »

Из слов

ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША

надо сделать слова

Иванов Вася
Петров Петя
Сидорова Маша
Какая GNUсная, GNUсная жизнь...
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Команда/скрипт для изменения регистра тектса

Сообщение Ленивая Бестолочь »

Код: Выделить всё

rakul@misa:~$ cat names
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША

rakul@misa:~$ cat names.sh
#!/bin/bash
while read name surname
do
        echo -n `echo -n $name| cut -b 1``echo -n $name| cut -b 2- | tr [:upper:] [:lower:]`' '
        echo `echo -n $surname| cut -b 1``echo -n $surname| cut -b 2- | tr [:upper:] [:lower:]`
done < names

rakul@misa:~$ ./names.sh
Иванов Вася
Петров Петя
Сидорова Маша

rakul@misa:~$


с вас $200.00коп
шутка
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
greengroon
Сообщения: 119
ОС: Ubuntu 9.04, FreeBSD 7.2

Re: Команда/скрипт для изменения регистра тектса

Сообщение greengroon »

Спасибо за комманды. Но.
Т.е. для каждой фамилии и имени нужно указывать переменную? Но этих фамилий дофига! Или я не понял?
Какая GNUсная, GNUсная жизнь...
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: Команда/скрипт для изменения регистра тектса

Сообщение Frank »

Да, ты ничего не понял.
1) Сохраняешь текст из xxx.odc в xxx.txt (т.е. чистый текст без форматирования)
2) Сохраняешь показанный уже код

Код: Выделить всё

#!/bin/bash
while read name surname
do
        echo -n `echo -n $name| cut -b 1``echo -n $name| cut -b 2- | tr [:upper:] [:lower:]`' '
        echo `echo -n $surname| cut -b 1``echo -n $surname| cut -b 2- | tr [:upper:] [:lower:]`
done < names

в файл names.sh
3) Делаешь его исполнимым

Код: Выделить всё

chmod +x names.sh

4) запускаешь ./names.sh xxx.txt > yyy.txt
5) из yyy.txt запихиваешь обратно в xxx.odc
Изображение
Спасибо сказали:
Аватара пользователя
greengroon
Сообщения: 119
ОС: Ubuntu 9.04, FreeBSD 7.2

Re: Команда/скрипт для изменения регистра тектса

Сообщение greengroon »

Ну это то я понял )). Я все сделал именно так за тем лишь исключением что скрипт не создавал, а выполнял команды в консоли (и текст остался как был, почему?). Ок, попробую рекомендованным методом в виде файла.
Какая GNUсная, GNUсная жизнь...
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Команда/скрипт для изменения регистра тектса

Сообщение diesel »

Если вспомнить что odt - это по-сути zip-архив, который можно распаковать, сделать какие-то изменения, и запаковать обратно, то... можно и немного усложнить/упросить решение. Если представить что в test.odt просто список, типа:
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША

то...

Код: Выделить всё

diesel@indie:~/tmp/odc/odc.try$ cat tmp.sh
#!/bin/bash

mkdir "tmp"
unzip -q "$1" -d "tmp"
./tmp.pl "tmp/content.xml" > content.xml-0
mv content.xml-0 "tmp/content.xml"
cd tmp;
zip -q -r "../${1%%.odt}-new.odt" *
cd ../
rm -rf tmp
diesel@indie:~/tmp/odc/odc.try$ cat tmp.pl
#!/usr/bin/perl
use encoding 'utf8';


while(<>){
    chomp;
    $_=~s/(<text:p.*?>)(.)(.*?)\s+(.)(.*?)(<\/text:p>)/$1.uc($2).lc($3)." ".uc($4).lc($5).$6/ge;
    print $_."\n";
}


запуск типа

Код: Выделить всё

./tmp.sh ../test.odt

даст в ../test-new.odt
Иванов Вася
Петров Петя
Сидорова Маша

PS. Это просто идея, а не готовое решение всех проблем на свете.
Спасибо сказали:
Аватара пользователя
greengroon
Сообщения: 119
ОС: Ubuntu 9.04, FreeBSD 7.2

Re: Команда/скрипт для изменения регистра тектса

Сообщение greengroon »

Спасибо за идею, но мне бы с первым вариантом попробовать разобраться. И так и сяк у меня на практике (и из консоли и файлом) в конечном файле получается
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША

Если вас не затруднит интереса ради, попробуйте кто нить и скажите получилось ли у вас такое?
Какая GNUсная, GNUсная жизнь...
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Команда/скрипт для изменения регистра тектса

Сообщение diesel »

greengroon писал(а):
29.03.2009 15:52
Спасибо за идею, но мне бы с первым вариантом попробовать разобраться. И так и сяк у меня на практике (и из консоли и файлом) в конечном файле получается
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША

Если вас не затруднит интереса ради, попробуйте кто нить и скажите получилось ли у вас такое?

нет :)

diesel@indie:~/tmp/odc/names$ echo "ИВАНОВ ВАСЯ
> ПЕТРОВ ПЕТЯ
> СИДОРОВА МАША" > names
diesel@indie:~/tmp/odc/names$ vim names.sh
diesel@indie:~/tmp/odc/names$ chmod +x names.sh
diesel@indie:~/tmp/odc/names$ ./names.sh
tr: Illegal byte sequence
? tr: Illegal byte sequence
?
tr: Illegal byte sequence
? tr: Illegal byte sequence
?
tr: Illegal byte sequence
? tr: Illegal byte sequence
?


получилось вот так:

Код: Выделить всё

diesel@indie:~/tmp/odc/names$ cat names | perl -p -e 'use encoding "utf8";s/(.)(.*?)\s+(.)(.*?)$/uc($1).lc($2)." ".uc($3).lc($4)/ge' > names.txt
diesel@indie:~/tmp/odc/names$ cat names.txt
Иванов Вася
Петров Петя
Сидорова Маша
Спасибо сказали:
Аватара пользователя
greengroon
Сообщения: 119
ОС: Ubuntu 9.04, FreeBSD 7.2

Re: Команда/скрипт для изменения регистра тектса

Сообщение greengroon »

Во блин на perl перешли что ли? Ок попробую. От перла я еще больше далек чем от азов на C. А еще все таки рабочий вариант на C имеется?
Какая GNUсная, GNUсная жизнь...
Спасибо сказали:
Аватара пользователя
greengroon
Сообщения: 119
ОС: Ubuntu 9.04, FreeBSD 7.2

Re: Команда/скрипт для изменения регистра тектса

Сообщение greengroon »

И у меня получилось. А что можно почитать чтобы самому такие значки лепить? Дайте ссылку пожалуйста на книжку какую нибудь ))
Какая GNUсная, GNUсная жизнь...
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Команда/скрипт для изменения регистра тектса

Сообщение diesel »

greengroon писал(а):
29.03.2009 16:15
И у меня получилось. А что можно почитать чтобы самому такие значки лепить? Дайте ссылку пожалуйста на книжку какую нибудь ))

ну по bash: http://www.opennet.ru/docs/RUS/bash_scripting_guide/
по perl: google Lama Book, Camel Book
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: Команда/скрипт для изменения регистра тектса

Сообщение Frank »

Кстати да, я побыстренькому сам попытался накорябать, и не вышло - похоже, что tr upper-lower неадекватно работает с non-ascii символами...
Изображение
Спасибо сказали:
Аватара пользователя
ripke
Сообщения: 85
ОС: Ubuntu 9.04, x86_64

Re: Команда/скрипт для изменения регистра тектса

Сообщение ripke »

greengroon писал(а):
28.03.2009 16:28
Есть большой файл open office. В нем список фамилий, причем все слова набраны в верхнем регистре. Надо исправить нормально, чтобы фамилии были с большой буквы, т е только первая буква в верхнем регистре. Глупо делать это вручную. Подскажите команду для опен офиса как это автоматизировать. Или может можно через какую скриптовую команду?

Это можно сделать в vim просто. Всего 2 команды

Код: Выделить всё

:%s/.*/\L&/

и

Код: Выделить всё

:%s/\<./\u&/g
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Команда/скрипт для изменения регистра тектса

Сообщение drBatty »

greengroon писал(а):
28.03.2009 17:50
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША

Код: Выделить всё

$ echo 'ИВАНОВ  ВАСЯ
ПЕТРОВ  ПЕТЯ
СИДОРОВА  МАША' | sed -r 's/\b[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ]+\b/\L\u&/g'
Иванов  Вася
Петров  Петя
Сидорова  Маша


ripke писал(а):
26.02.2010 16:26
Это можно сделать в vim просто. Всего 2 команды

оно у вас всё так поменяет, а надо ТОЛЬКО БОЛЬШИМИ

Frank писал(а):
29.03.2009 18:35
Кстати да, я побыстренькому сам попытался накорябать, и не вышло - похоже, что tr upper-lower неадекватно работает с non-ascii символами...

умеет. только там не всё так просто: ну кто вам сказал, что
1)Я больше А?
2)между А и Я только русские буквы, причём все буквы?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Команда/скрипт для изменения регистра тектса

Сообщение eddy »

drBatty писал(а):
26.02.2010 17:01
1)Я больше А?
2)между А и Я только русские буквы, причём все буквы?

Подтверждаю:

Код: Выделить всё

chartable

 32 -       64 - @     96 - `    128 - ─    160 - ═    192 - ю    224 - Ю
 33 - !     65 - A     97 - a    129 - │    161 - ║    193 - а    225 - А
 34 - "     66 - B     98 - b    130 - ┌    162 - ╒    194 - б    226 - Б
 35 - #     67 - C     99 - c    131 - ┐    163 - ё    195 - ц    227 - Ц
 36 - $     68 - D    100 - d    132 - └    164 - ╓    196 - д    228 - Д
 37 - %     69 - E    101 - e    133 - ┘    165 - ╔    197 - е    229 - Е
 38 - &     70 - F    102 - f    134 - ├    166 - ╕    198 - ф    230 - Ф
 39 - '     71 - G    103 - g    135 - ┤    167 - ╖    199 - г    231 - Г
 40 - (     72 - H    104 - h    136 - ┬    168 - ╗    200 - х    232 - Х
 41 - )     73 - I    105 - i    137 - ┴    169 - ╘    201 - и    233 - И
 42 - *     74 - J    106 - j    138 - ┼    170 - ╙    202 - й    234 - Й
 43 - +     75 - K    107 - k    139 - ▀    171 - ╚    203 - к    235 - К
 44 - ,     76 - L    108 - l    140 - ▄    172 - ╛    204 - л    236 - Л
 45 - -     77 - M    109 - m    141 - █    173 - ╜    205 - м    237 - М
 46 - .     78 - N    110 - n    142 - ▌    174 - ╝    206 - н    238 - Н
 47 - /     79 - O    111 - o    143 - ▐    175 - ╞    207 - о    239 - О
 48 - 0     80 - P    112 - p    144 - ░    176 - ╟    208 - п    240 - П
 49 - 1     81 - Q    113 - q    145 - ▒    177 - ╠    209 - я    241 - Я
 50 - 2     82 - R    114 - r    146 - ▓    178 - ╡    210 - р    242 - Р
 51 - 3     83 - S    115 - s    147 - ⌠    179 - Ё    211 - с    243 - С
 52 - 4     84 - T    116 - t    148 - ■    180 - ╢    212 - т    244 - Т
 53 - 5     85 - U    117 - u    149 - ∙    181 - ╣    213 - у    245 - У
 54 - 6     86 - V    118 - v    150 - √    182 - ╤    214 - ж    246 - Ж
 55 - 7     87 - W    119 - w    151 - ≈    183 - ╥    215 - в    247 - В
 56 - 8     88 - X    120 - x    152 - ≤    184 - ╦    216 - ь    248 - Ь
 57 - 9     89 - Y    121 - y    153 - ≥    185 - ╧    217 - ы    249 - Ы
 58 - :     90 - Z    122 - z    154 -      186 - ╨    218 - з    250 - З
 59 -;     91 - [    123 - {    155 - ⌡    187 - ╩    219 - ш    251 - Ш
 60 - <     92 - \    124 - |    156 - °    188 - ╪    220 - э    252 - Э
 61 - =     93 - ]    125 - }    157 - ²    189 - ╫    221 - щ    253 - Щ
 62 - >     94 - ^    126 - ~    158 - ·    190 - ╬    222 - ч    254 - Ч
 63 - ?     95 - _    127 -     159 - ÷    191 - ©    223 - ъ    255 - Ъ
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Команда/скрипт для изменения регистра тектса

Сообщение drBatty »

eddy писал(а):
26.02.2010 17:03
KOI8-R для русских, юникод - для китайцев

у меня на другой машине тоже кои... а здесь UTF, но всё равно не работает. Может быть в cp1251 сработает [А-ЯЁ], но стандарт, ЕМНИП, этого НЕ гарантирует.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: