Substituindo [0-9] por [AJ] não está funcionando com o sed

11

Estou trabalhando em um comando que substitui todos os dígitos de 0 a 9 pelas letras correspondentes em sed. Eu sei que estou fazendo algo errado, mas o sed não está interpretando a regex de substituição como algo além de uma string literal.

O comando que estou usando é sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

Parece bem direto para mim, mas estou preso há cerca de uma hora. A saída que recebo apenas substitui 0-9 pela string "[AJ]"

Matthew Snell
fonte

Respostas:

38

Em substituição, apenas a correspondência (lado esquerdo) é uma expressão regular. A substituição é mais ou menos apenas uma string literal (com alguma expansão de barra invertida) - não é uma regex .

Você deseja transliteração, não substituição, então substitua spor y:

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

O sed não pode usar intervalos y, mas o Perl pode:

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

Ou apenas use tr:

echo 34031445 | tr 0-9 A-J
choroba
fonte
12
Acordado. tré a ferramenta mais fácil e provavelmente a mais rápida para o trabalho.
Sdkks