[Решено] Из лога вытянуть текст (UTF-16, bash)

Модератор: Модераторы разделов

Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

[Решено] Из лога вытянуть текст

Сообщение Eronex »

Есть файл:
-----------------------

DON'T MODIFY THIS FILE

-----------------------

PERFORMER: auCDtect Task Manager, ver. 1.5.1RC4 build 1.5.1.5
Copyright © 2008-2010 y-soft. All rights reserved
http://y-soft.org

ANALYZER: auCDtect: CD records authenticity detector, version 0.8.2
Copyright © 2004 Oleg Berngardt. All rights reserved.
Copyright © 2004 Alexander Djourik. All rights reserved.


FILE: Solar Fields - Origin # 01.wav
Size: 838311644 Hash: 175D4DE206ED1320F07D2F8F15D2B891 Accuracy: -m8
Conclusion: CDDA 100%
Signature: 99383EC2EB742E2F83CBBA764901F714F7C1D112

Как с помощью bash-скрипта получить выделенную область из этого UTF-16-лога, чтобы потом добавить её в имя какого-нибудь файла?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: [Решено] Из лога вытянуть текст

Сообщение /dev/random »

grep или sed.

А чтобы нормально обрабатывался utf-16, удобнее всего сконвертировать поток iconv'ом в utf-8. Ваш Капитан Очевидность.
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: [Решено] Из лога вытянуть текст

Сообщение liaonau »

Eronex писал(а):
27.02.2011 16:24
Как с помощью bash-скрипта получить выделенную область из этого UTF-16-лога, чтобы потом добавить её в имя какого-нибудь файла?

Что-то вроде:

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

touch "aaa$(cat file|enconv|grep -o 'выражение')bbb"

Если я правильно понял задачу.
Спасибо сказали:
Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

Re: [Решено] Из лога вытянуть текст

Сообщение Eronex »

/dev/random писал(а):
27.02.2011 16:35
grep или sed.

А чтобы нормально обрабатывался utf-16, удобнее всего сконвертировать поток iconv'ом в utf-8. Ваш Капитан Очевидность.

Да, спасибо за iconv, а то на enconv зациклился :)
Насчёт grep или sid: я так и не понял, как правую часть строки вытянуть, та которая после двоеточия про проценты. Задайте векторы пожалуйста :)
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: [Решено] Из лога вытянуть текст

Сообщение liaonau »

Eronex писал(а):
27.02.2011 16:40
Насчёт grep или sid: я так и не понял, как правую часть строки вытянуть, та которая после двоеточия про проценты. Задайте векторы пожалуйста :)

grep -o или sed s/^[^:]\+://
Спасибо сказали:
Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

Re: [Решено] Из лога вытянуть текст

Сообщение Eronex »

liaonau писал(а):
27.02.2011 16:39
Eronex писал(а):
27.02.2011 16:24
Как с помощью bash-скрипта получить выделенную область из этого UTF-16-лога, чтобы потом добавить её в имя какого-нибудь файла?

Что-то вроде:

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

touch "aaa$(cat file|enconv|grep -o 'выражение')bbb"

Если я правильно понял задачу.

enconv не желает перекодировать из UTF-16 :( Хотя, например cp1251, проглатывает. И с флагом "-i" выдаёт почему-то не UTF-16:

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

$ enconv -i *.txt
Astrix - Red means distortion.wav.auCDtect.txt: UCS-2
Autechre - Move Of Ten (BRE-31).wav.auCDtect.txt: UCS-2
Carbon Based Lifeforms - Interloper.wav.auCDtect.txt: UCS-2
E-Mantra - Arcana.wav.auCDtect.txt: UCS-2
ERA - The Essential.wav.auCDtect.txt: UCS-2
Folder.auCDtect.txt: UCS-2
Pendulum - Immersion.wav.auCDtect.txt: UCS-2
Solar Fields - Origin # 01.wav.auCDtect.txt: UCS-2
$

Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: [Решено] Из лога вытянуть текст

Сообщение liaonau »

Eronex писал(а):
27.02.2011 16:45
enconv не желает перекодировать из UTF-16 :( Хотя, например cp1251, проглатывает. И с флагом "-i" выдаёт почему-то не UTF-16:

У меня работает, но это неважно, я enconv на вскидку написал — можно использовать и iconv — какая разница?
Вот по быстрому:

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

touch "начало$(cat file|iconv -f UTF16 -t ваша_кодировка | grep '^Conclusion:'| sed 's/^[^:]\+: \+//')конец"
Спасибо сказали:
Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

Re: [Решено] Из лога вытянуть текст

Сообщение Eronex »

liaonau писал(а):
27.02.2011 16:47
Вот по быстрому:

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

touch "начало$(cat file|iconv -f UTF16 -t ваша_кодировка | grep '^Conclusion:'| sed 's/^[^:]\+: \+//')конец"

Спасибо! Работает!! :)

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

$ cat 'Carbon Based Lifeforms - Interloper.wav.auCDtect.txt' | iconv -f UTF16 -t UTF8 | grep 'Conclusion:' | sed 's/^[^:]\+: \+//'
CDDA 86%


Единственное осталось непонятным, откуда в имени файла возникает вопросик:
$ touch "начало$(cat 'Carbon Based Lifeforms - Interloper.wav.auCDtect.txt' | iconv -f UTF16 -t UTF8 | grep 'Conclusion:' | sed 's/^[^:]\+: \+//')конец"
$ ls
.............
началоCDDA 86%?конец
.............
eronex@localhost ~/recycle/music/lossless/tracks/step 3 $


Теперь понятно:
$ rm началоCDDA\ 86%^Mконец

... автодополнение показало, что это символ возврата каретки (энтер виндовый).
Возникает новый вопрос: как от него избавиться?

Как вариант -- пакетно перебрать все файлы и позаменять двусимвольные "энтеры" на юниксовые...
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [Решено] Из лога вытянуть текст

Сообщение NickLion »

Как вариант - dos2unix.
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: [Решено] Из лога вытянуть текст

Сообщение liaonau »

Eronex писал(а):
27.02.2011 17:08
... автодополнение показало, что это символ возврата каретки (энтер виндовый).
Возникает новый вопрос: как от него избавиться?

Можно просто sed вырезать:

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

sed -e 's/^[^:]\+: \+//' -e 's/^R//g'

^R — это один символ. Набирать в shell (или vim): нажать control+v а потом control+R.
Спасибо сказали:
Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

Re: [Решено] Из лога вытянуть текст

Сообщение Eronex »

liaonau писал(а):
27.02.2011 17:47
Eronex писал(а):
27.02.2011 17:08
... автодополнение показало, что это символ возврата каретки (энтер виндовый).
Возникает новый вопрос: как от него избавиться?

Можно просто sed вырезать:

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

sed -e 's/^[^:]\+: \+//' -e 's/^R//g'

^R — это один символ. Набирать в shell (или vim): нажать control+v а потом control+R.

Идеально! :)
Получилась вот такая строка:

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

touch "начало$(cat 'Carbon Based Lifeforms - Interloper.wav.auCDtect.txt' | iconv -f UTF16 -t UTF8 | grep 'Conclusion:' | sed -e 's/^[^:]\+: \+//' -e 's/^M//g')конец"

, где ^M — это тот самый символ, скопированный из файла с неправильным именем, и вставленный нажатием control+v в скрипт.

liaonau, спасибо!
Спасибо сказали: