エイリアスはSTDINで読み取れないようです。

エイリアスはSTDINで読み取れないようです。

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

この場合、sedSTDINから何もインポートせずに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

関連情報