
hexdump
出力の16進数を「Pythonの」16進表現に変換するためのエイリアスを探しています。
$ echo "5f 74 34 0c c9 7b 9f f8 7a 7c 46 ff ff 5c 31 26" | sed 's/ */\\x/g' | awk '{print "\\x"$0}'
\x5f\x74\x34\x0c\xc9\x7b\x9f\xf8\x7a\x7c\x46\xff\xff\x5c\x31\x26
上記の方法が有効でしたので、次のようにエイリアスを作成してみました.bashrc
。
alias pythonhex="sed 's/ */\\x/g' | awk '{print \"\\\\x\"$0}'"
しかし、うまくいかないようです。
$ echo "5f 74 34 0c c9 7b 9f f8 7a 7c 46 ff ff 5c 31 26" | pythonhex
\x
この場合、sed
STDINから何もインポートせずにawk
前に追加するようです\x
。
答え1
引用問題です。拡張を防ぐには、単一引用符を使用し、$0
各リテラル単一引用符を適切にエスケープします。
alias pythonhex='sed '\''s/ */\\x/g'\'' | awk '\''{print "\\x"$0}'\'
答え2
エイリアスの問題は実際には参照の問題であり、ユーザーが正しく解決しました。チョロバ。
しかし、より簡単な機能を考えてみましょう。
pythonhex(){ printf "\134x%s" "$@"; echo; }
次のように使用されます。
$ pythonhex 5f 74 34 0c c9 7b 9f f8 7a 7c 46 ff ff 5c 31 26
\x5f\x74\x34\x0c\xc9\x7b\x9f\xf8\x7a\x7c\x46\xff\xff\x5c\x31\x26