Remplacer [0-9] par [AJ] ne fonctionne pas avec sed

11

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 l'expression régulière 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 "[AJ]"

Matthew Snell
la source

Réponses:

38

En substitution, seule la correspondance (côté gauche) est une expression régulière. Le remplacement est plus ou moins juste une chaîne littérale (avec une certaine expansion de barre oblique inverse) - ce n'est pas une expression régulière .

Vous voulez une translittération, pas une substitution, remplacez-la spar y:

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

sed ne peut pas utiliser de 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
choroba
la source
12
D'accord. trest l'outil le plus simple et probablement le plus rapide pour le travail.
sdkks