Модератор:  Модераторы разделов 
	
	
			
	
			
		
	
		
		
		
			
				
								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  
						Администратор 			
		Сообщения:  5426ОС:  Gentoo 
		
									
					
								
						
									Сообщение  /dev/random  27.02.2011 16:35 
			
			
			
			
			grep или sed.
			
			
									
						
										
			
			 
			
		 
				
		
		 
	 
		
		
		
		
			
				
																			
								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/^[^:]\+: \+//')конец"? конец
Теперь понятно:
$ 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 , спасибо!