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

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

12
Sepakat. tradalah alat termudah dan mungkin alat tercepat untuk pekerjaan itu.
SDK
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.