Вот скрипт Perl.Помимо использования таблицы поиска на другом языке, это самый эффективный способ сделать то, что вы хотите.Я думаю, что опция поиска на самом деле будет медленнее, потому что текст должен обрабатываться символ за символом.
#!/usr/bin/perl -w
use strict;
while (<>) {
s{([\x{00}-\x{09}\x{0b}-\x{1f}])}{
'\u00' . unpack "H*", $1;
}eg;
print;
}
Я использовал здесь unpack
вместо ord
.Я не проверял их относительную производительность.
Выражение в скобках в подстановке включает все управляющие символы, кроме новой строки.Я не включил \x{ff}
, но он может быть добавлен.
Пример:
$ echo -e "Hello, this \n is a new line with some \001\037\014 stuff. This \t is a tab" | ./scriptname
Hello, this
is a new line with some \u0001\u001f\u000c stuff. This \u0009 is a tab
Ваша команда echo
выводит эти экранированные значения в виде литералов backslash-t и backslash-n, потому чтоВы не использовали -e
, чтобы заставить их интерпретироваться.Я предполагаю, что вы намеревались включить -e
, вот что я и сделал здесь.