Command-Line
在bash中反轉十六進制數
是否有一個簡單的命令來反轉十六進制數?
例如,給定十六進制數:
030201
輸出應該是:
010203
使用該
rev
命令,我得到以下資訊:102030
更新
$ 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
使用
fold
+tac
+tr
:$ echo 030201|fold -w2|tac|tr -d "\n" 010203
fold
- 每 2 個字節拆分一次tac
- 反向貓tr
- 刪除換行符
如果你的系統有
rev
命令。hex=030201 new_hex=$(printf %s "$hex" | dd conv=swab 2> /dev/null | rev)
如果它有一個
tac
ortail -r
命令:new_hex=$(echo "$hex" | fold -w 2 | tac | paste -sd '\0' -)
與
zsh
:setopt extendedglob new_hex=${(j[])${(s[]Oa)${hex//(#b)(?)(?)/$match[2]$match[1]}}}
(如在
dd
方法中:交換字元對,拆分為單個字元列表(s[]
),顛倒順序(Oa
)和連接(j[]
))。或者:
printf -v new_hex '%2$s%1$s' ${(s[]Oa)hex}
POSIXly:
new_hex=$( awk ' BEGIN { hex = ARGV[1]; l = length(hex) for (i = 1; i < l; i += 2) new_hex = substr(hex, i, 2) new_hex print new_hex }' "$hex" )
或者
new_hex=$(echo "$hex" | sed -e 'G;:1' -e 's/\(..\)\(.*\n\)/\2\1/;t1' -e 's/.//')
與
perl
:new_hex=$(perl -le 'print reverse(shift =~ /../g)' -- "$hex")