echo -n 5a | perl -pe 's/([0-9a-f]{2})/chr hex $1/gie'
Beachten Sie, dass dadurch keine Nicht-Hex-Zeichen übersprungen werden. Wenn Sie nur das Hex wollen (keine Leerzeichen aus der ursprünglichen Zeichenfolge usw.):
echo 5a | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'
Auch zsh
und bash
unterstützen dies nativ in echo
:
echo -e '\x5a'
Dies können Sie mit echo
tun nur, ohne die anderen Sachen. Vergessen Sie nicht, "-n" hinzuzufügen, sonst erhalten Sie automatisch einen Zeilenumbruch:
echo -n -e "\x5a"
Früher habe ich das mit xxd:
gemachtecho -n 5a | xxd -r -p
Aber dann wurde mir klar, dass xxd in Debian/Ubuntu Teil von vim-common ist und daher in einem Minimalsystem möglicherweise nicht vorhanden ist. Um auch Perl zu vermeiden (IMHO auch nicht Teil eines Minimalsystems), habe ich schließlich sed, xargs und printf wie folgt verwendet:
echo -n 5a | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf
Meistens möchte ich nur ein paar Bytes konvertieren und für solche Aufgaben ist es in Ordnung. Der Vorteil dieser Lösung gegenüber der von ghostdog74 ist, dass diese beliebig lange Hex-Strings automatisch umwandeln kann. xargs wird verwendet, weil printf nicht von der Standardeingabe liest.