Модератор: Модераторы разделов
Eronex
Сообщения: 106
ОС: Ubuntu
Сообщение
Eronex » 27.02.2011 16:24
Есть файл:
-----------------------
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
Сообщение
/dev/random » 27.02.2011 16:35
grep или sed.
А чтобы нормально обрабатывался utf-16, удобнее всего сконвертировать поток iconv'ом в utf-8. Ваш Капитан Очевидность.
liaonau
Сообщения: 390
ОС: gentoo
Сообщение
liaonau » 27.02.2011 16:39
Eronex писал(а): ↑ 27.02.2011 16:24
Как с помощью bash-скрипта получить выделенную область из этого UTF-16-лога, чтобы потом добавить её в имя какого-нибудь файла?
Что-то вроде:
Код: Выделить всё
touch "aaa$(cat file|enconv|grep -o 'выражение')bbb"
Если я правильно понял задачу.
Eronex
Сообщения: 106
ОС: Ubuntu
Сообщение
Eronex » 27.02.2011 16:40
/dev/random писал(а): ↑ 27.02.2011 16:35
grep или sed.
А чтобы нормально обрабатывался utf-16, удобнее всего сконвертировать поток iconv'ом в utf-8. Ваш Капитан Очевидность.
Да, спасибо за iconv, а то на enconv зациклился
Насчёт grep или sid: я так и не понял, как правую часть строки вытянуть, та которая после двоеточия про проценты. Задайте векторы пожалуйста
liaonau
Сообщения: 390
ОС: gentoo
Сообщение
liaonau » 27.02.2011 16:43
Eronex писал(а): ↑ 27.02.2011 16:40
Насчёт grep или sid: я так и не понял, как правую часть строки вытянуть, та которая после двоеточия про проценты. Задайте векторы пожалуйста
grep -o или sed s/^[^:]\+://
Eronex
Сообщения: 106
ОС: Ubuntu
Сообщение
Eronex » 27.02.2011 16:45
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
Сообщение
liaonau » 27.02.2011 16:47
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
Сообщение
Eronex » 27.02.2011 17:08
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
Сообщение
NickLion » 27.02.2011 17:30
Как вариант - dos2unix.
liaonau
Сообщения: 390
ОС: gentoo
Сообщение
liaonau » 27.02.2011 17:47
Eronex писал(а): ↑ 27.02.2011 17:08
... автодополнение показало, что это символ возврата каретки (энтер виндовый).
Возникает новый вопрос: как от него избавиться?
Можно просто sed вырезать:
^R — это один символ. Набирать в shell (или vim): нажать control+v а потом control+R.
Eronex
Сообщения: 106
ОС: Ubuntu
Сообщение
Eronex » 27.02.2011 18:20
liaonau писал(а): ↑ 27.02.2011 17:47
Eronex писал(а): ↑ 27.02.2011 17:08
... автодополнение показало, что это символ возврата каретки (энтер виндовый).
Возникает новый вопрос: как от него избавиться?
Можно просто sed вырезать:
^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 , спасибо!