Команда/скрипт для изменения регистра тектса
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 119
- ОС: Ubuntu 9.04, FreeBSD 7.2
Команда/скрипт для изменения регистра тектса
Есть большой файл open office. В нем список фамилий, причем все слова набраны в верхнем регистре. Надо исправить нормально, чтобы фамилии были с большой буквы, т е только первая буква в верхнем регистре. Глупо делать это вручную. Подскажите команду для опен офиса как это автоматизировать. Или может можно через какую скриптовую команду?
Какая GNUсная, GNUсная жизнь...
-
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: Команда/скрипт для изменения регистра тектса
Как этот файл выглядит-то? Покажите кусочек или опишите поподробней, как там расположены фамилии, указаны ли инициалы или полные имена, чем разделены записи и т. п. Мне телепатию за неуплату отключили. :)
-
- Сообщения: 119
- ОС: Ubuntu 9.04, FreeBSD 7.2
Re: Команда/скрипт для изменения регистра тектса
Из слов
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША
надо сделать слова
Иванов Вася
Петров Петя
Сидорова Маша
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША
надо сделать слова
Иванов Вася
Петров Петя
Сидорова Маша
Какая 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коп
шутка
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
- Сообщения: 119
- ОС: Ubuntu 9.04, FreeBSD 7.2
Re: Команда/скрипт для изменения регистра тектса
Спасибо за комманды. Но.
Т.е. для каждой фамилии и имени нужно указывать переменную? Но этих фамилий дофига! Или я не понял?
Т.е. для каждой фамилии и имени нужно указывать переменную? Но этих фамилий дофига! Или я не понял?
Какая GNUсная, GNUсная жизнь...
-
- Сообщения: 1059
- ОС: Ubuntu, Debian
Re: Команда/скрипт для изменения регистра тектса
Да, ты ничего не понял.
1) Сохраняешь текст из xxx.odc в xxx.txt (т.е. чистый текст без форматирования)
2) Сохраняешь показанный уже код
в файл names.sh
3) Делаешь его исполнимым
4) запускаешь ./names.sh xxx.txt > yyy.txt
5) из yyy.txt запихиваешь обратно в xxx.odc
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

-
- Сообщения: 119
- ОС: Ubuntu 9.04, FreeBSD 7.2
Re: Команда/скрипт для изменения регистра тектса
Ну это то я понял )). Я все сделал именно так за тем лишь исключением что скрипт не создавал, а выполнял команды в консоли (и текст остался как был, почему?). Ок, попробую рекомендованным методом в виде файла.
Какая GNUсная, GNUсная жизнь...
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Команда/скрипт для изменения регистра тектса
Если вспомнить что odt - это по-сути zip-архив, который можно распаковать, сделать какие-то изменения, и запаковать обратно, то... можно и немного усложнить/упросить решение. Если представить что в test.odt просто список, типа:
то...
запуск типа
даст в ../test-new.odt
PS. Это просто идея, а не готовое решение всех проблем на свете.
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША
то...
Код: Выделить всё
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. Это просто идея, а не готовое решение всех проблем на свете.
-
- Сообщения: 119
- ОС: Ubuntu 9.04, FreeBSD 7.2
Re: Команда/скрипт для изменения регистра тектса
Спасибо за идею, но мне бы с первым вариантом попробовать разобраться. И так и сяк у меня на практике (и из консоли и файлом) в конечном файле получается
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША
Если вас не затруднит интереса ради, попробуйте кто нить и скажите получилось ли у вас такое?
ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША
Если вас не затруднит интереса ради, попробуйте кто нить и скажите получилось ли у вас такое?
Какая GNUсная, GNUсная жизнь...
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Команда/скрипт для изменения регистра тектса
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
Иванов Вася
Петров Петя
Сидорова Маша
-
- Сообщения: 119
- ОС: Ubuntu 9.04, FreeBSD 7.2
Re: Команда/скрипт для изменения регистра тектса
Во блин на perl перешли что ли? Ок попробую. От перла я еще больше далек чем от азов на C. А еще все таки рабочий вариант на C имеется?
Какая GNUсная, GNUсная жизнь...
-
- Сообщения: 119
- ОС: Ubuntu 9.04, FreeBSD 7.2
Re: Команда/скрипт для изменения регистра тектса
И у меня получилось. А что можно почитать чтобы самому такие значки лепить? Дайте ссылку пожалуйста на книжку какую нибудь ))
Какая GNUсная, GNUсная жизнь...
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Команда/скрипт для изменения регистра тектса
greengroon писал(а): ↑29.03.2009 16:15И у меня получилось. А что можно почитать чтобы самому такие значки лепить? Дайте ссылку пожалуйста на книжку какую нибудь ))
ну по bash: http://www.opennet.ru/docs/RUS/bash_scripting_guide/
по perl: google Lama Book, Camel Book
-
- Сообщения: 1059
- ОС: Ubuntu, Debian
Re: Команда/скрипт для изменения регистра тектса
Кстати да, я побыстренькому сам попытался накорябать, и не вышло - похоже, что tr upper-lower неадекватно работает с non-ascii символами...

-
- Сообщения: 85
- ОС: Ubuntu 9.04, x86_64
Re: Команда/скрипт для изменения регистра тектса
greengroon писал(а): ↑28.03.2009 16:28Есть большой файл open office. В нем список фамилий, причем все слова набраны в верхнем регистре. Надо исправить нормально, чтобы фамилии были с большой буквы, т е только первая буква в верхнем регистре. Глупо делать это вручную. Подскажите команду для опен офиса как это автоматизировать. Или может можно через какую скриптовую команду?
Это можно сделать в vim просто. Всего 2 команды
Код: Выделить всё
:%s/.*/\L&/
и
Код: Выделить всё
:%s/\<./\u&/g
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Команда/скрипт для изменения регистра тектса
Код: Выделить всё
$ echo 'ИВАНОВ ВАСЯ
ПЕТРОВ ПЕТЯ
СИДОРОВА МАША' | sed -r 's/\b[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ]+\b/\L\u&/g'
Иванов Вася
Петров Петя
Сидорова Маша
оно у вас всё так поменяет, а надо ТОЛЬКО БОЛЬШИМИ
умеет. только там не всё так просто: ну кто вам сказал, что
1)Я больше А?
2)между А и Я только русские буквы, причём все буквы?
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Команда/скрипт для изменения регистра тектса
Подтверждаю:
Код: Выделить всё
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 - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Команда/скрипт для изменения регистра тектса
у меня на другой машине тоже кои... а здесь UTF, но всё равно не работает. Может быть в cp1251 сработает [А-ЯЁ], но стандарт, ЕМНИП, этого НЕ гарантирует.