Необходимо перекомпилировать gstreamer0.10-ffmpeg
с Вашим libx264
совместимый с 10 битами h264 кодек. Или скомпилируйте VLC с ним. Не забудьте использовать корректное --prefix
в ./configure
. Я рекомендую использовать VLC в этом случае.
В sed все команды могут быть снабжены префиксом условием, которое указывает что строки применить команду к. Общий вид условия является шаблоном поиска. Шаблон поиска /.\{250\}/
строки соответствий больше чем с 250 символами. Для таких строк соответствуйте первым 80 символам и последним 40, и замените целую строку префиксом, __
и суффикс.
sed -e '/.\{250\}/ s/^\(.\{80\}\).*\(.\{40\}\)$/\1__\2/'
Можно даже принять меры, чтобы шаблон заменяющей команды соответствовал только достаточно длинным линиям.
sed -e 's/^\(.\{80\}\).\{130,\}\(.\{40\}\)$//'
Я не знаю sed
хорошо, таким образом, мое решение находится в awk:
awk 'length>250{len=length;$0=substr($0,1,80) "_" substr($0,len-40+1)};1' file
awk
испытывает недостаток в-i оперативной опции замены файла как sed. Я буду просто awk ... file1 > file2 && mv -f file2 file1
)
– Marcos
18.06.2012, 21:42
len
переменная в целом
– Marcos
18.06.2012, 23:04
sed -i
- это не портативно, и большинство версий, которые я видел, не обрабатывает специальные файлы (как символьные ссылки) правильно (это удалит ссылку и заменит его копией файла).
– jw013
03.10.2012, 20:36
Я не знаю sed
хорошо, таким образом, мое решение находится в awk:
awk 'length>250{len=length;$0=substr($0,1,80) "_" substr($0,len-40+1)};1' file
Вот команда awk, которая сделает это:
awk 'len=length{if(len>250){print substr($0,0,80),"__",substr($0,len-40,len)}else{print $0}}' data.txt
Объяснение:
Если строка является дольше, чем 250 символами, долго печатают первые 80 символов, сопровождаемых строкой ___ и затем последних 40 символов.
Если строка короче, чем 250 символов, просто распечатайте исходную строку.
Существует pipeable способ извлечь первые 80 и продлиться 40, символы строки с sed
, однако sed
не имеет 'если операторы', таким образом, нет никакого пути непосредственно в sed, чтобы протестировать на длину строки и затем выполнить операцию на нем.
Получение первых 80 и последних 40 символов всех строк может быть, покончили | sed -e 's/^\(.\{80\}\).*\(.\{40\}\)/\1\_\2/'
.
sed -i -e 's/^\(.\{80\}\).*\(.\{40\}\)/\1\_\2/' logfile
выполнит оперативную модификацию Вашего файла, но это ограничено работой на всех строках.
\{120\}
если OP, который попросили первых 80 символов? Ваша команда получает первые 120, и продержитесь 40 символов. Нет никакой потребности волноваться о замене, изменяющей короткие строки, потому что короткие строки никогда не будут соответствовать шаблону замены. Если бы Вы действительно хотели удостовериться, что короткие строки были нетронутыми, то Вы могли бы указать /.\{120,\}/
адрес для команды замены.
– jw013
19.06.2012, 00:38
sed
путь:sed -i.bak -e 's/^\(.\{80\}\).\{130,\}.*\(.\{40\}\)$/\1 ... \2/'
Все, что они \делают это раздражающим для чтения, но я понимаю, почему они необходимы.awk
путь более человекочитаем для кого-то не привыкшего к этим regexes. – Marcos 19.06.2012, 12:00-r
), затем можно использовать более ясное( )
и{ }
...\(
, и т.д. метод является более портативным. – Peter.O 19.06.2012, 15:57