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]"

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

12
D'accord. trest l'outil le plus simple et probablement le plus rapide pour le travail.
sdkks
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.