web-dev-qa-db-fra.com

Remplacer [0-9] par [A-J] ne fonctionnant pas avec sed

Je travaille sur une commande qui remplace tous les chiffres 0 à 9 par leurs lettres correspondantes dans sed. Je sais que je fais quelque chose de mal, mais sed n’interprète pas la regex de remplacement comme autre chose qu’un littéral de chaîne.

La commande que j'utilise est sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

Cela me semble assez simple, mais je suis coincé dessus depuis environ une heure. La sortie que je reçois remplace simplement 0-9 par la chaîne "[A-J]"

11
Matthew Snell

En substitution, seule la correspondance (à gauche) est une expression régulière. Le remplacement est plus ou moins juste une chaîne littérale (avec quelques extensions de barre oblique inversée) - ce n'est pas une regex .

Vous voulez une translittération, pas une substitution, remplacez donc s par y:

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

sed ne peut pas utiliser les plages dans y, mais Perl peut:

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

Ou utilisez simplement tr:

echo 34031445 | tr 0-9 A-J
38
choroba