Заміна [0-9] на [AJ] не працює з sed


11

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

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

Мені це здається досить простим, але я затримався на ньому близько години. Вихід, який я отримую, просто замінює 0-9 рядком "[AJ]"

Відповіді:


38

Замінник регулярним виразом є лише сірник (лівий бік). Заміна більш-менш просто символьний рядок (з деяким розширенням зворотної косої межі) - це не регулярні вираження .

Ви хочете транслітерацію, а не заміну, тому замініть 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

12
Домовились. trце найпростіший і, мабуть, найшвидший інструмент для роботи.
sdkks
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.