Это, вероятно, содержит некоторые опечатки или что-то, но все равно терпите меня. Сначала определите границу (input
- это файл, содержащий канал данных, если необходимо):
boundary=`grep '^Content-Type: multipart/form-data; boundary=' input|sed 's/.*boundary=//'`
Затем отфильтруйте Filedata
часть:
fd='Content-Disposition: form-data; name="Filedata"'
sed -n "/$fd/,/$boundary/p"
Последняя часть фильтрует несколько дополнительных строк - строки заголовка перед включением пустой строки и самой границы, поэтому измените последнюю строку с предыдущей на:
sed -n "/$fd/,/$boundary/p" | sed '1,/^$/d' | sed '$d'
sed -n "/$fd/,/$boundary/p"
фильтрует строки между заголовком Filedata
и границей (включительно),
sed '1,/^$/d'
удаляет все, вплоть до первой строки (включая заголовки) и
sed '$d'
удаляет последнюю строку (границу).
После этого вы ждете, пока Деннис (см. Комментарии) оптимизирует его, и вы получите это:
sed "1,/$fd/d;/^$/d;/$boundary/,$d"
Теперь, когда вы пришли сюда, поцарапайте все это и сделайте то, что предложил Игнасио. Причина - это, вероятно, не будет работать (надежно) для этого, так как GIF - это двоичные данные.
Ах, это было хорошее упражнение! В любом случае, для любителей sed
вот отличная страница:
Выдающаяся информация.