GNU/Linux >> Znalost Linux >  >> Linux

Jak převést hex na ASCII znaky v prostředí Linuxu?

echo -n 5a | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie'

Všimněte si, že to nepřeskočí nehexadecimální znaky. Pokud chcete pouze hex (žádné mezery z původního řetězce atd.):

echo 5a | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'

Také zsh a bash podporujte to nativně v echo :

echo -e '\x5a'

Můžete to udělat pomocí echo pouze bez ostatních věcí. Nezapomeňte přidat "-n", jinak se automaticky zobrazí zalomení řádku:

echo -n -e "\x5a"

Kdysi jsem to dělal s xxd:

echo -n 5a | xxd -r -p

Ale pak jsem si uvědomil, že v Debianu/Ubuntu je xxd součástí vim-common, a proto nemusí být přítomen v minimálním systému. Abych se také vyhnul Perlu (IMHO také není součástí minimálního systému), nakonec jsem použil sed, xargs a printf takto:

echo -n 5a | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf

Většinou chci převést jen pár bajtů a pro takové úkoly je to v pořádku. Výhodou tohoto řešení oproti řešení ghostdog74 je, že dokáže automaticky převádět hex struny libovolných délek. xargs se používá, protože printf nečte ze standardního vstupu.


Linux
  1. Jak zobrazit řídicí znaky (^c, ^d, ^[, …) odlišně v shellu?

  2. Jak změnit Shell v Linuxu

  3. Jak BASH Shell načítá své konfigurační soubory v Linuxu

  1. Jak změnit výchozí prostředí v Linuxu

  2. Jak změnit výchozí shell v Linuxu

  3. Jak převést výstup shellu Linuxu do HTML?

  1. Jak mohu spočítat počet znaků v proměnné Bash

  2. Jak vložit nový řádek do skriptu prostředí Linux?

  3. Linuxové shell utils:převod seznamu šestnáctkových čísel na seznam desetinných čísel