Mengganti [0-9] dengan [AJ] tidak bekerja dengan sed

11

Saya mengerjakan perintah yang menggantikan semua angka 0-9 dengan huruf yang sesuai di sed. Saya tahu saya melakukan sesuatu yang salah, tetapi sed tidak menafsirkan regex pengganti sebagai apa pun kecuali string literal.

Perintah yang saya gunakan adalah sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

Tampaknya cukup mudah bagi saya, tetapi saya telah terjebak di sana selama sekitar satu jam. Output yang saya terima hanya mengganti 0-9 dengan string "[AJ]"

Matthew Snell
sumber

Jawaban:

38

Dalam substitusi, hanya pertandingan (sisi kiri) yang merupakan ekspresi reguler. The pengganti lebih atau kurang hanya string literal (dengan beberapa ekspansi backslash) - itu tidak regex .

Anda ingin transliterasi, bukan substitusi, jadi ganti sdengan y:

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

sed tidak dapat menggunakan rentang dalam y, tetapi Perl dapat:

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

Atau cukup gunakan tr:

echo 34031445 | tr 0-9 A-J
choroba
sumber
12
Sepakat. tradalah alat termudah dan mungkin alat tercepat untuk pekerjaan itu.
SDK