Замена [0-9] на [AJ] не работает с sed

1399
Matthew Snell

Я работаю над командой, которая заменяет все цифры 0-9 на соответствующие им буквы в sed. Я знаю, что делаю что-то не так, но sed не интерпретирует заменяющее регулярное выражение как что-либо, кроме строкового литерала.

Я использую команду sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

Это кажется довольно простым для меня, но я застрял на нем около часа. Вывод, который я получаю, просто заменяет 0-9 на строку «[AJ]»

11

1 ответ на вопрос

38
choroba

В подстановке только совпадение (левая сторона) является регулярным выражением. Замена более или менее просто символьная строка (с некоторым расширением обратной косой черты) - это не регулярное выражение .

Вы хотите транслитерацию, а не замену, поэтому замените sна y:

echo 34031445 | sed 'y/0123456789/ABCDEFGHIJ/' 

sed не может использовать диапазоны y, но Perl может:

echo 34031445 | perl -pe 'y/0-9/A-J/' 

Или просто используйте tr:

echo 34031445 | tr 0-9 A-J 
Согласовано. `tr` - самый простой и, вероятно, самый быстрый инструмент для работы. sdkks 6 лет назад 12

Похожие вопросы