Alias 似乎无法从 STDIN 读取

Alias 似乎无法从 STDIN 读取

我正在寻找一个别名,将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

相关内容