16進数を変更する簡単なコマンドはありますか?
たとえば、16進数を指定すると、次のようになります。
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
答え1
fold
++で:tac
tr
$ echo 030201|fold -w2|tac|tr -d "\n"
010203
fold
- 2バイトごとに分割tac
- リバース猫tr
- 改行文字を削除
答え2
システムにrev
コマンドがある場合。
hex=030201
new_hex=$(printf %s "$hex" | dd conv=swab 2> /dev/null | rev)
tac
またはコマンドがある場合tail -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}
POSIX的に:
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")
答え3
あなたはできますバイナリに変換、リバースバイト、オプションで末尾の改行を削除rev
<2.24、再変換します。
$ xxd -revert -plain <<< 030201 | LC_ALL=C rev | tr -d '\n' | xxd -plain
010203
使用
$ bash --version | head -n1
GNU bash, version 4.3.42(1)-release (x86_64-redhat-linux-gnu)
$ xxd -version
xxd V1.10 27oct98 by Juergen Weigert
$ rev --version
rev from util-linux 2.28.2
これは実際にいいえ文字列に00
(NULバイト)が含まれている場合は、その点の出力が切り捨てられるかrev
(0a
改行)が含まれているrev
場合に有効です。ワイヤーフル出力ではなく
答え4
(完全さのために)
$ echo 030201 | grep -o .. | tac | paste -sd '' -
010203