Имеем файл типа:
[Message]
Text="<текст_в_KOI8-R>"
Background=16777215
Foreground=0
Time=1122989527
[ICQMessage]
Flags=1
Background=16777215
Foreground=0
Time=1122989831
ServerText="<текст_в_CP1251>"
Это многократно повторяется
нужно кои8 оставить в кои8, СР1251 перекодировать в кои8
Алгоритм, настолько я понимаю, примерно такой:
1. Ищем строчку, начинающуюся на ServerText
2. Перекодируем её из СР1251 в KOI8-R
3. Идём искать следующую такую строчку (GO TO 1)
ЗЫЖ FreeBSD 5.4 :devil_2:
Нужно перекодировать выборочно строчки в файле
Модератор: Bizdelnick
-
Sten
- Бывший модератор
- Сообщения: 78
- Статус: admin.. just admin..
- ОС: FreeBSD 7.0-STABLE
Нужно перекодировать выборочно строчки в файле
Сумасшедший юниксоид в синей футболке с рыбой(с)
Ошибки юности легко сходили с pyк
Ах, молодость, - волшебный звyк свиpели.
Мы часто под собой пилили сyк.
Тепеpь и мы не те, и сyки постаpели.
Ошибки юности легко сходили с pyк
Ах, молодость, - волшебный звyк свиpели.
Мы часто под собой пилили сyк.
Тепеpь и мы не те, и сyки постаpели.
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Нужно перекодировать выборочно строчки в файле
А, ну так бы сразу и сказал. Я не понял, что ср1251 бывает только после ServerText. Тогда это вопрос к знатокам седа -- там это, я так понимаю, задачка на тфу.(Sten @ Понедельник, 08 Августа 2005, 16:25) писал(а):1. Ищем строчку, начинающуюся на ServerText
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
xorader
- Сообщения: 1030
- Статус: собирающий миры
- ОС: Debian
Re: Нужно перекодировать выборочно строчки в файле
помоему в sed'е можно внешнюю команду вызывать на найденное совпадение -- отсюда и копать (sed -> iconv)
а, вообще:
а, вообще:
Код: Выделить всё
perl -e 'while (<STDIN>) { if (m/^ServerText/) { my ($tmp_str) = `echo "$_" | iconv -f cp1251 -t koi8-r`; printf $tmp_str; } else {print;}} ' < file.txt > file-out.txtMolchanov Alexander (aka Xor)
*offtopic* - ololo!
*offtopic* - ololo!
-
Sten
- Бывший модератор
- Сообщения: 78
- Статус: admin.. just admin..
- ОС: FreeBSD 7.0-STABLE
Re: Нужно перекодировать выборочно строчки в файле
Для xorader:
Практически оно, но часть текста вообще удаляет..
Наверное, всё-таки дожидаемся из отпуска madskull`a по вопросу sed`a..
Практически оно, но часть текста вообще удаляет..
Наверное, всё-таки дожидаемся из отпуска madskull`a по вопросу sed`a..
Сумасшедший юниксоид в синей футболке с рыбой(с)
Ошибки юности легко сходили с pyк
Ах, молодость, - волшебный звyк свиpели.
Мы часто под собой пилили сyк.
Тепеpь и мы не те, и сyки постаpели.
Ошибки юности легко сходили с pyк
Ах, молодость, - волшебный звyк свиpели.
Мы часто под собой пилили сyк.
Тепеpь и мы не те, и сyки постаpели.
-
xorader
- Сообщения: 1030
- Статус: собирающий миры
- ОС: Debian
Re: Нужно перекодировать выборочно строчки в файле
вот исправленный вариант:
Код: Выделить всё
perl -e 'while (<STDIN>) { if (m/^ServerText/) { chomp; my ($tmp_str) = `echo $_ | iconv -c -f cp1251 -t koi8-r`; print $tmp_str; } else {print;}} ' < file.txt > file-out.txtMolchanov Alexander (aka Xor)
*offtopic* - ololo!
*offtopic* - ololo!
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Нужно перекодировать выборочно строчки в файле
Для Sten:
Код: Выделить всё
sed -ie '/^ServerText/{s/"/\\"/g;s/^\(.*\)$/echo "\1"\|iconv -f cp1251 -t koi8r/e}' some.fileПисать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
xorader
- Сообщения: 1030
- Статус: собирающий миры
- ОС: Debian
Re: Нужно перекодировать выборочно строчки в файле
s/чтототам/внешняя_команда/e <- я правильно понял ? нигде не найду описания флага "e" 
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
*offtopic* - ololo!
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Нужно перекодировать выборочно строчки в файле
(xorader @ Среда, 10 Августа 2005, 9:06) писал(а):s/чтототам/внешняя_команда/e <- я правильно понял
не совсем так. читай info sed:
(xorader @ Среда, 10 Августа 2005, 9:06) писал(а):нигде не найду описания флага "e"
info sed -> sed programs -> extended commands
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
xorader
- Сообщения: 1030
- Статус: собирающий миры
- ОС: Debian
Re: Нужно перекодировать выборочно строчки в файле
спасибо...
info sed -> sed programs -> The "s" Command
Нашёл описание:
info sed -> sed programs -> The "s" Command
Нашёл описание:
`e'
This command allows one to pipe input from a shell command into
pattern space. If a substitution was made, the command that is
found in pattern space is executed and pattern space is replaced
with its output. A trailing newline is suppressed; results are
undefined if the command to be executed contains a NUL character.
This is a GNU `sed' extension.
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
*offtopic* - ololo!