我正在编写一个sed脚本,其中一部分需要使用ASCII码的十六进制值替换某个子集中的字符。我做了一些研究而且找不到任何东西,所以我开始认为sed没有让我这么做的功能。如果这里有任何sed大师,请你启发我吗?
P.S。:像sed -e "s/A/41/g" -e "s/B/42/g"... etc
这样的解决方案不会这样做。
答案 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'