Thay thế [0-9] bằng [AJ] không hoạt động với sed


11

Tôi đang làm việc trên một lệnh thay thế tất cả các chữ số 0-9 bằng các chữ cái tương ứng của chúng trong sed. Tôi biết tôi đang làm gì đó sai, nhưng sed không diễn giải regex thay thế như bất cứ điều gì ngoài một chuỗi ký tự.

Lệnh tôi đang sử dụng là sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

Nó có vẻ khá đơn giản với tôi, nhưng tôi đã bị mắc kẹt trong đó khoảng một giờ. Đầu ra tôi nhận được chỉ thay thế 0-9 bằng chuỗi "[AJ]"

Câu trả lời:


38

Thay thế, chỉ có trận đấu (phía bên trái) là một biểu thức chính quy. Sự thay thế ít nhiều chỉ là một chuỗi ký tự (với một số mở rộng dấu gạch chéo ngược) - đó không phải là một biểu thức chính quy .

Bạn muốn phiên âm, không thay thế, vì vậy thay thế sbằng y:

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

sed không thể sử dụng phạm vi trong y, nhưng Perl có thể:

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

Hoặc chỉ sử dụng tr:

echo 34031445 | tr 0-9 A-J

12
Đã đồng ý. trlà công cụ dễ nhất và có lẽ là nhanh nhất cho công việc.
sdkks
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.