(export LC_ALL=C; xxd -revert -plain <<< 1234abcd | rev | tr -d '\n' | xxd -plain | tr -d '\n') なぜ動作しないのですか?

(export LC_ALL=C; xxd -revert -plain <<< 1234abcd | rev | tr -d '\n' | xxd -plain | tr -d '\n') なぜ動作しないのですか?
(export LC_ALL=C; xxd -revert -plain <<< 1234abcd | rev | tr -d '\n' | xxd -plain | tr -d '\n')
rev: stdin: Invalid or incomplete multibyte or wide character

ほとんどはcdab3412を返します。

しかし、リターン

rev: stdin: Invalid or incomplete multibyte or wide character

この問題をどのように解決しますか?

答え1

システムがrevバイトシーケンスを文字として処理できない場合は、Perlを試してください。

$ (export LC_ALL=C; xxd -revert -plain <<< 1234abcd | perl -pe '$_ = reverse $_' | xxd -plain)
cdab3412

改行の削除を省略しました。不要なようです。

答え2

echo 1234abcd | grep -o .. | tac | paste -sd '' -

cdab3412

答え3

使用revsed:

$ rev <<< 1234abcd | sed -E 's/(.)(.)/\2\1/g'
cdab3412

そしてawk

$ awk -F '' '{ for(i=NF-1;i>0;i-=2) printf "%s", $i $(i+1) } END{ print "" }' <<< 1234abcd
cdab3412

答え4

rev次の行に置き換えてください。

perl -nle 'print scalar reverse $_'

源泉:Perlは1行ずつ

少なくとも間違ったエンコーディングのために中断されることはありません。

使いやすくするには、次のエイリアスを作成してください。

alias reverse="perl -nle 'print scalar reverse \$_'"

関連情報