Bash (Разбить файл.)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Bash

Сообщение Naruto-kun »

Есть файл message.txt. Там содержится хэш, сертификат и сами данные.
Хэш начинается от начала файла и заканчивается перед началом сертификата(-----BEGIN CERTIFICATE-----), сам же сертификат заканчивается на:

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

-----END CERTIFICATE-----

Данные в message, это:

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

Text for test1
11111111111111
Stroka 3


Я уже перепробовал кучу вариантов, но так и не смог нормально разбить файл. Очень нужна помощь.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
IgorVS
Сообщения: 14
ОС: Debian

Re: Bash

Сообщение IgorVS »

В подобных случаях я использую Midnight Commander и команду dd.
Просматривая двоичный файл (F3) в Midnight Commander можно определить позицию начала и конца нужного фрагмента, а командой dd скопировать этот фрагмент в отдельный файл.
Здесь об этом хорошо написано.
Еще потребуется калькулятор для перевода шестнадцатеричных позиций в Midnight Commander в десятичную систему счисления для команды dd.

Например, для копирования хэша в файл hash.txt:
dd if=message.txt of=hash.txt bs=1 count=512

Успехов!
Спасибо сказали:
strephil
Сообщения: 47
ОС: GNU

Re: Bash

Сообщение strephil »

А что конкретно нужно? Вытащить сертификат или вытащить данные?

Сертификат „вытаскивается“ так: sed -n '/BEGIN/,/END/ p' message.txt
Данные вот так: sed '1,/END/ d'

Если интересует хэш, то так: sed '/BEGIN/,$ d'
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Bash

Сообщение drBatty »

Naruto-kun писал(а):
07.01.2010 23:09
Есть файл message.txt. Там содержится хэш, сертификат и сами данные.
Хэш начинается от начала файла и заканчивается перед началом сертификата(-----BEGIN CERTIFICATE-----), сам же сертификат заканчивается на:
Код
-----END CERTIFICATE-----

Данные в message, это:
Код
Text for test1
11111111111111
Stroka 3

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

sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p'



IgorVS писал(а):
08.01.2010 15:40
В подобных случаях я использую Midnight Commander и команду dd.

жуть...
strephil спасибо, опередили :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
IgorVS
Сообщения: 14
ОС: Debian

Re: Bash

Сообщение IgorVS »

drBatty писал(а):
08.01.2010 17:34
IgorVS писал(а):
08.01.2010 15:40
В подобных случаях я использую Midnight Commander и команду dd.

жуть...


Значит sed - это наше все :) , а я ошибочно считал, что им только текстовые файлы можно обрабатывать.
dd в нашем случае действительно пусть отдыхает.
Спасибо сказали:
strephil
Сообщения: 47
ОС: GNU

Re: Bash

Сообщение strephil »

strephil писал(а):
08.01.2010 16:45
Сертификат „вытаскивается“ так: sed -n '/BEGIN/,/END/ p' message.txt
Данные вот так: sed '1,/END/ d'
Если интересует хэш, то так: sed '/BEGIN/,$ d'

Последняя команда не очень-то правильная. Лучше бы так: sed '/BEGIN/ q'
так и записывается короче, и выполняется быстрее. (На больших файлах может даже быть заметно).
Да и в остальные по желанию можно добавить преждевременный выход (уже из соображений скорости выполнения, а не скорости написания).
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Bash

Сообщение drBatty »

IgorVS писал(а):
08.01.2010 22:44
Значит sed - это наше все smile.gif , а я ошибочно считал, что им только текстовые файлы можно обрабатывать.
dd в нашем случае действительно пусть отдыхает.

есть некоторые тонкости:
1) если в файле мало символов \n, то возможны "строки" в несколько гигабайт, и они будут в ОЗУ :(
2) если включен режим UTF-8, то возможны "несимволы", которые приводят к неожиданностям, и даже к опасности взлома.
strephil писал(а):
08.01.2010 23:08
Если интересует хэш, то так: sed '/BEGIN/,$ d'

Последняя команда не очень-то правильная. Лучше бы так: sed '/BEGIN/ q'

хм.
тогда уж
/BEGIN/Q
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Bash

Сообщение Naruto-kun »

Большое спасибо. А то я уже на перле сделал. Но это покруче будет. В очередной раз убеждаюсь, что sed очень полезная весчь.
PS. Задам тут же ещё один вопрос.
Есть, к примеру, в скрипте такая строчка:

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

openssl dgst -sign CAkey.pem -out signature -sha1 $1

При подписи, спрашивается пароль секретного ключа (CAkey.pem). Посдкажите как сделать, чтобы пароль он получал сам, не спрашивая или что-то в этом роде.
Насколько я понимаю, это можно сделать перенаправлением. Но как точно, пока не смог понять.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Bash

Сообщение Naruto-kun »

Проблема по прежнему ещё не решена.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали:
Аватара пользователя
Atragor
Сообщения: 681
Статус: ...

Re: Bash

Сообщение Atragor »

А Вы пробовали что-нибудь из перечисленного в разделе PASS PHRASE ARGUMENTS в man openssl?

Скажем,

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

echo "pass" | openssl dgst -sign mykey.pem -out signature -passin stdin -sha1 file
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
Спасибо сказали:
Аватара пользователя
Naruto-kun
Сообщения: 228
Статус: небритый гентушник
ОС: Gentoo(PC)/easypeasy(Netbook)

Re: Bash

Сообщение Naruto-kun »

Atragor писал(а):
10.01.2010 15:20
А Вы пробовали что-нибудь из перечисленного в разделе PASS PHRASE ARGUMENTS в man openssl?

Скажем,

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

echo "pass" | openssl dgst -sign mykey.pem -out signature -passin stdin -sha1 file


Спс, всё работает.
PS. Я смотрел ман. Видимо, плохо посмотрел.
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Если на вопрос ни кто не знает ответа, то пора читать описание.
Спасибо сказали: