Заранее извините за вопрос новичка, но я довольно застрял и заинтересован в изучении.
Я пытаюсь отразить строку (в шестнадцатеричном формате), а затем вырезать часть этого с помощью команды cut. Это выглядит так:
for y in "${Offset}"; do
echo "${entry}" | cut -b 60-$y
done
Где echo $ {Offset} приводит к
75 67 69 129 67 567 69
Я бы хотел, чтобы каждая запись была напечатана, а затем вырезана из 60-го байта до соответствующего число в $ Offset.
Таким образом, первая запись будет обрезана 60-75.
Однако я получаю сообщение об ошибке:
cut: 67: No such file or directory
cut: 69: No such file or directory
cut: 129: No such file or directory
cut: 67: No such file or directory
cut: 567: No such file or directory
cut: 69: No such file or directory
Я попытался добавить / удалить скобки вокруг каждой переменной, но так и не получил правильный результат. Будем благодарны за любую помощь!
ОБНОВЛЕНИЕ: обновлен код с изменением от markp-fuso. Тем не менее, эти коды по-прежнему не работают, как предполагалось. Я хотел бы напечатать каждую запись на основе соответствующего смещения, но это идет не так. Это печатает каждую запись семь раз, где каждый раз основан на семи различных смещениях. Любые идеи о том, как это исправить?
#!/bin/bash
MESSAGES=$( sqlite3 -csv file.db 'SELECT quote(data) FROM messages' | tr -d "X'" )
for entry in ${MESSAGES}; do
Offset='75 67 69 129 67 567 69'
for y in $Offset; do
echo "${entry:59:(y-59)}"
done
done
echo ${MESSAGES}
В результате получается семь строк с минимальной длиной 80 байт и максимум 600. Мой вывод должен быть:
Строка одна: вырезать сначала смещение
Строка два: вырезать по второму смещению и т. д ...