Czy istnieje proste polecenie odwrócenia liczby szesnastkowej?
Na przykład, biorąc pod uwagę liczbę szesnastkową:
030201
Dane wyjściowe powinny być:
010203
Za pomocą rev
polecenia otrzymuję:
102030
Aktualizacja
$ bash --version | head -n1
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
$ xxd -version
xxd V1.10 27oct98 by Juergen Weigert
$ rev --version
rev from util-linux 2.20.1
command-line
numeric-data
hex
Iñaki Murillo
źródło
źródło
010203
jako szesnastkową, mimo że nie używam0x
Odpowiedzi:
Możesz przekonwertować go na binarny , odwrócić bajty , opcjonalnie usunąć końcowe znaki nowej linii
rev
<2.24 i przekonwertować z powrotem:Za pomocą
Nie działa to, jeśli ciąg zawiera bajt NUL, ponieważ
rev
w tym momencie obcina dane wyjściowe.źródło
0102030a
zamiast010203
0102030a
rev
wersji2.20.1
; użyj tego mrówczanuxxd -revert -plain <<< '030201' | LC_ALL=C rev | tr -d '\n'| xxd -plain
rev
przed wersją2.24
mają nowy błąd linii. więcej informacji github.com/karelzak/util-linux/commit/…Jeśli twój system ma
rev
polecenie.Jeśli ma polecenie
tac
lubtail -r
:Z
zsh
:(jak w
dd
podejściu: zamień pary znaków, podziel na listę pojedynczych znaków (s::
), odwróć kolejność (Oa
) i łączyć (j::
)).POSIXly:
Lub
Z
perl
:źródło
perl -F'(..)' -lane 'print reverse(@F)'
:)-F
tak używać . (Widzę to teraz opisane wsplit()
instrukcji).-F
to w zasadzie podział na$_
... oprócz użycia wyrażenia regularnego, tak jak-F'/"\K\|(?=")/'
można określić liczbę podziałów, jak również ... na przykład-F'/:/,$_,2'
... użyj,()
jeśli separator również musi zostać przechwyconytr -d '\n'
Z
fold
+tac
+tr
:fold
- dzielone co 2 bajtytac
- rewers kattr
- usuń nowe linieźródło
Spowoduje to cofnięcie każdej linii szesnastkowej:
/(..)/g
buduje listę przechwyconych dopasowańźródło
(ze względu na kompletność)
źródło
Na podstawie odpowiedzi Ipora Sircera https://unix.stackexchange.com/a/321867/337458 Poleciłbym to,
~/.bashrc
aby mieć fajne polecenie, które możesz po prostu wywołać:źródło