Alias não parece ler de STDIN

3

Estou procurando um alias para converter o hex de hexdump output na notação hexadecimal do "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

O texto acima funciona, então eu tentei criar um alias no meu .bashrc como tal:

alias pythonhex="sed 's/  */\x/g' | awk '{print \"\\x\"$0}'"

Mas parece que não funciona:

$ echo "5f 74 34 0c c9 7b 9f f8  7a 7c 46 ff ff 5c 31 26" | pythonhex 
\x

Aparece, neste caso, que sed não está recebendo nada de STDIN e awk apenas prefixando \x a nada.

    
por Juicy 20.08.2015 / 14:26

2 respostas

3

Este é um problema de citação. Use aspas simples para evitar $0 da expansão e escape corretamente de cada aspas simples literais:

alias pythonhex='sed '\''s/  */\x/g'\'' | awk '\''{print "\x"$0}'\'
    
por 20.08.2015 / 14:44
1

É verdade que o problema do seu alias foi um problema de citação, resolvido corretamente pelo usuário choroba .

Mas você pode considerar uma função mais simples:

pythonhex(){ printf "4x%s" "$@"; echo; }

Usado como:

$ 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
    
por 22.08.2015 / 06:06