有没有办法在sed中获取角色的ASCII码?

时间:2011-12-24 08:11:01

标签: linux shell sed

我正在编写一个sed脚本,其中一部分需要使用ASCII码的十六进制值替换某个子集中的字符。我做了一些研究而且找不到任何东西,所以我开始认为sed没有让我这么做的功能。如果这里有任何sed大师,请你启发我吗?

P.S。:像sed -e "s/A/41/g" -e "s/B/42/g"... etc这样的解决方案不会这样做。

3 个答案:

答案 0 :(得分:1)

如果perl是您的可行替代方案,那么:

fge@erwin ~ $ perl -pe 's,[abcRte], ord($&) ,ge'
oiiiiisdfa
oiiiiisdf97
abcRte
97989982116101

答案 1 :(得分:0)

,而IFS = read -r -n1 c;做printf'%x'“'$ c”;完成< infile> OUTFILE

不,sed's'命令只能将字符转换为低/大写对应字符,它没有用等效的ascii代码替换它们的工具。有用于音译的'y'命令,但这需要一对一的映射,因此无法正常工作。

如果没有看到您的代码,我最好的建议就是转移到awk

答案 2 :(得分:0)

这可能对您有用:

ord () { printf '%d' "'$1"; }
hex () { printf '%x' "'$1"; }
export -f ord hex
echo {a..z} | sed '/[f-m]/s//$(ord &)/g;s/.*/echo "&"/' | sh
a b c d e 102 103 104 105 106 107 108 109 n o p q r s t u v w x y z
echo {a..z} | sed '/[f-m]/s//$(hex &)/g;s/.*/echo "&"/' | sh
a b c d e 66 67 68 69 6a 6b 6c 6d n o p q r s t u v w x y z

如果你有GNU sed:

sed '/[f-m]/s//$(ord &)/g;s/.*/echo "&"/e'

sed '/[f-m]/s//$(hex &)/g;s/.*/echo "&"/e'