2010-08-27 124 views
1

十六進制我想轉換ASCII碼(如-_.等)在Unix外殼十六進制表示(公元前沒有命令)。例如,- =>%2d轉換ASCII代碼在Unix shell腳本

我該怎麼辦?

+0

可以'sed' /'awk' /'perl'等使用嗎? – kennytm 2010-08-27 15:37:23

+0

請僅使用sed或bash/sh shell;) – 2010-08-30 08:23:18

回答

1
perl -e 'print ord("_"), "\n"' 
+0

thx很多,我將在解壓縮後使用此表達式:perl -e'print unpack(「H *」,「 - 」),「\ n」' – 2010-08-30 08:51:35

+0

但是,要求安裝Perl ... – 2015-07-08 10:58:11

7

這工作在bash中,破折號(SH)和ksh,zsh的灰分和僅使用內建的:

編輯:

這裏是一個版本ORD的是,在十六進制輸出和CHR接受十六進制輸入:

ordhex() 
{ 
    printf '%x' "'$1" 
} 

chrhex() 
{ 
    printf \\x"$1" 
} 

原來的十進制版本:

ord() 
{ 
    echo -n $(((256 + $(printf '%d' "'$1"))%256)) 
} 

實例(具有添加新行):

$ ord ' ' 
32 
$ ord _ 
95 
$ ord A 
65 
$ ord '*' 
42 
$ ord \~ 
126 

這裏是對應chr

chr() 
{ 
    printf \\$(($1/64*100+$1%64/8*10+$1%8)) 
} 

實例:

$ chr 125 
} 
$ chr 42 
* 
$ chr 0 | xxd 
0000000: 00          . 
$ chr 255 | xxd 
0000000: ff          . 
+0

thx但是ord函數給了我十進制值,我想要ascii代碼的十六進制值,thx爲你的幫助 – 2010-08-30 08:25:13

+0

@Olivier:請參閱我的編輯。 – 2010-08-30 09:29:20

+0

太棒了,它的工作!多謝 – 2010-08-30 12:26:16

0

蟒-c「進口SYS;打印 「{0:02X}」。格式(ORD(sys.argv中[1])) ' '_'

蟒-c' 打印 「{0:02X}」 .format(ord(「_」))'

我同意這不是最好的一行,但是我在看到基於Perl的答案後無法抗拒。

0

在KSH版本以下的作品我用:

chr() 
{ 
    printf \\x$1 
}