Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Bash-script на проверку: является ли строка HEX или нет  (Прочитано 832 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн BizzyBoz

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Добрый вечер!
Суть такая. Есть файл, в нём множество строк. Каждую из строк нужно анализировать. Строки в основном - hex. Записаны следующим образом:
120E0B1B0266620B7414
1C0E161C0F736809711C
180F061D087D6F0B7F15
и т.д.
Но среди них попадаются и просто "слова" (например, TEST, WINDOW, и тд).

Задача: else-if'ом проверить является ли очередная строка, считанная из файла HEX-представлением или нет.

Как это сделать проще всего? Заранее благодарна. Ах да, строки произвольной длины, абсолютно

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
ТЗ не полное - ну поймете вы, что строка HEX или не HEX дальше то - что делать с этими строками?

А так - что-то типа (писал по памяти мог быть не точен)
cat file > sed -n '/[0-9A-F]*/p'Это выведет только HEX строчки
« Последнее редактирование: 21 Августа 2015, 00:22:14 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Sly_tom_cat, Немного некорректный регэксп (конечно в основном из-за неконкретного условия), у Вас скрипт выведет и пустые строки, и строки где в словах встречаются буквы A-F (хотя бы 1, те же TEST и WINDOW например).
Код: (bash) [Выделить]
sed '/^[[:xdigit:]]\+$/!d'И вообще grep быстрее и как раз для таких случаев.
Код: (bash) [Выделить]
grep -x '[[:xdigit:]]\+'И вопрос к ТС "на миллион" FACE — это слово или число(64206)? Или BABE, ACE, BEEF и т.д.?
« Последнее редактирование: 21 Августа 2015, 00:52:38 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн BizzyBoz

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Ок, подкорректированное ТЗ звучит так:
Построчно анализировать файл
если очередная строка - hex, то <анализировать её>
иначе выдать строку без изменения.

Вообще FACE, ACE, BEEF - наверное будем рассматривать как число. Суть в том, что во входном файле много "мусора", надо его отфильтровать (притом вывести его без изменения), а hex-ы анализировать.


EDIT: Сама разобралась. Кажется так:
for f in `cat /tmp/list`; do
RES=$(echo $f | grep -x '[[:xdigit:]]\+');
if [[ $RES ]]; then #анализирование ;
else echo $f;
fi 
done
« Последнее редактирование: 21 Августа 2015, 01:21:23 от BizzyBoz »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Строки состоять целиком из числа или может быть несколько чисел в строке?while read -r line
do
    if [[ "$line" =~ ^[[:xdigit:]]+$ ]]
    then
        # check xdigits here
    else
        echo "$line"
done </tmp/list
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.053 секунд. Запросов: 25.