Есть ли способ получить ASCII-код персонажа в sed? - PullRequest
1 голос
/ 24 декабря 2011

Я пишу сценарий sed, часть которого требует замены символов определенного подмножества шестнадцатеричными значениями их кодов ASCII. Я провел некоторое исследование и ничего не смог найти, поэтому начинаю думать, что у sed нет функции, которая позволяла бы мне это делать. Если здесь есть какие-нибудь гуру, не могли бы вы просветить меня?

P.S .: решения типа sed -e "s/A/41/g" -e "s/B/42/g"... etc не подойдут.

Ответы [ 3 ]

1 голос
/ 24 декабря 2011

Если Perl является для вас жизнеспособной альтернативой, тогда:

fge@erwin ~ $ perl -pe 's,[abcRte], ord($&) ,ge'
oiiiiisdfa
oiiiiisdf97
abcRte
97989982116101
0 голосов
/ 24 декабря 2011

Это может работать для вас:

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'
0 голосов
/ 24 декабря 2011

при IFS = чтение -r -n1 c; do printf '% x' "'$ c"; выполнено outfile

Нет, sed Команда 's' s 'может конвертировать только символы в их нижние / верхние регистры, она не может заменить их эквивалентным кодом ascii. Существует команда 'y' для транслитерации, но для нее требуется отображение 1-в-1, поэтому оно не будет работать.

Не видя ваш код, моя лучшая рекомендация - перейти на awk

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...