LINUX.ORG.RU

Команда grep


0

1

есть файл со строками в шестнадцатиричной системы, разной длины от 6 до 8 символов. Необходимо извлечь из каждого набора по 2 символа (если строка имеет 7 символов - взять первые 2 пары и оставшийся 1 символ) и поместить их в переменную

Исходник Необходимо получить F372EB96 (F3 72 EB 96) F372EB9 (F3 72 EB 9) F372EB (F3 72 EB)

Ответ на: комментарий от Tankiro

простите, а grep точно нужно? и что вы там под переменными понимаете?

echo -e "F372EB96\nF372EB9\nF372EB\n" |
while read line; do
  echo $line | grep -Po '..?' |
  while read i; do
    echo -en "$i "
  done
  echo ""
done

anonymous
()
Ответ на: комментарий от anonymous

Файл содержит различные строки в 16-м виде. Каждая пара(или один) символов составляет путь к файлу (/F3/72/EB - как частный пример). Необходимо вытащить пару (один символ), перевести в десятичный вид и составить путь.

Tankiro
() автор топика
Ответ на: комментарий от Tankiro

продолжай уточнять ТЗ, может постов через 10 картина прояснится

sdio ★★★★★
()
Ответ на: комментарий от Tankiro
echo -e "F372EB96\nF372EB9\nF372EB" |
while read line; do
  a=( $(echo $line | grep -Po '..?') )
  echo "/${a[0]}/"$(echo "ibase=16; ${a[1]}" | bc)"/${a[2]}/${a[3]}"
done
anonymous
()
Ответ на: комментарий от Tankiro
$ echo -e "F372EB96\nF372EB9\nF372EB" | \
> sed -e 's,..,&/,g' -e 's,[^/]$,&/,'
F3/72/EB/96/
F3/72/EB/9/
F3/72/EB/
bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 2)
Ответ на: комментарий от anonymous

нет, просто это первое, что я нашел... но строки, которые необходимо разбирать данным образом содержаться в текстовом файле...

Tankiro
() автор топика
Ответ на: комментарий от anonymous
echo -e "F372EB96\nF372EB9\nF372EB" |
while read line; do
  a=$(echo "ibase=16; ${line:0:2}" | bc)
  b=$(echo "ibase=16; ${line:2:2}" | bc)
  c=$(echo "ibase=16; ${line:4:2}" | bc)
  d=$(echo "ibase=16; ${line:6:2}" | bc)
  echo "/$a/$b/$c/$d"
done
anonymous
()
Ответ на: комментарий от anonymous

Спасибо большое - сработало на УРА :)

Tankiro
() автор топика
Ответ на: комментарий от anonymous
echo -e "F372EB96\nF372EB9\nF372EB" |
while read line; do
  a=( $(echo "ibase=16; "\
    "$(echo $line |
       sed 's/../&; /g' |
       sed 's/; $//')" | bc ) )
  for i in ${a[@]}; do
    echo -en "/$i"
  done
  echo ""
done
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.