我正在寻找一个别名,将hexdump
输出中的十六进制转换为“Python”的十六进制表示法:
$ 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