|
Тема
|
Bash задачка
|
|
Автор |
Филип Петев () |
Публикувано | 05.07.12 10:45 |
|
Здравейте, може ли някой да ми каже има ли начин с bash скрипт да се прави функцията byte flip, която я има повече по инженерните калкулатори, накратко имам 0x30e4 и търся резултат 0xe430, тоест да сменя местата на байтовете, а примерно 0x7ed да става 0xed07. Претърсих доста места в интернет, но не можах да намеря нещо което да ме насочи как може да стане това. Благодаря предварително.
Ако спреш за момент да търсиш чуждите грешки, може и да видиш своите...
| |
|
в максимално нагледен вид може така:
((k = 0xabcd))
((m = k >> 8))
((n = k & 0xff))
((z = (n << 8) | (m)))
printf "0x%02x 0x%02x 0x%02x\n" $k $m $n
printf "0x%02x\n" $z
#
същото, на един ред:
((y = ((k & 0xff) << 8) | (k >> 8) ))
може и още по-лесен начин да има, но не знам какъв е.
| |
|
Ако все още имаш нужда от решение, един малко по-текстов подход, отколкото на колегата пръч.
Това ще ти изплюе резултата в конзола
sed -r s/"0x([0-9a-fA-F]{2,2})([0-9a-fA-F]{2,2})"/0x\\2\\1/ filename.txt
Ако искаш направо да ги размени в самия файл
sed -i -r s/"0x([0-9a-fA-F]{2,2})([0-9a-fA-F]{2,2})"/0x\\2\\1/ filename.txt
Ако това което разменяш не е във файл а идва на stdin, може да направиш pipe:
cmd_output_generator | sed -r s/"0x([0-9a-fA-F]{2,2})([0-9a-fA-F]{2,2})"/0x\\2\\1/
| |
|
|
|
|